使用 IIS10 URL 重写从 MediaWiki URL 中删除命名空间前缀



我有一个在IIS10中托管的MediaWiki安装。我正在尝试使用 URL 重写模块从一些 MediaWiki 文章 URL 中删除命名空间前缀。

  • 在MediaWiki中,"Main"命名空间之外的文章显示为foo.com/wiki/Namespace:Article_Title
  • 我只需要删除"Bar:"命名空间前缀,其他前缀可以保持不变
  • 限制:我无法将这些文章移动到主命名空间中

所需的结果将显示来自foo.com/wiki/Bar:Article_Title的内容,但显示为foo.com/wiki/Article_Title

现有入站 URL 重写

我已经有一个URL重写,根据Microsoft在IIS上的MediaWiki的文档,它从URL中删除了查询字符串。以下是我基于该指南的重写规则:

<rule name="Clean-WikiArticlePages" stopProcessing="false">
<match url="^wiki/(.*)$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="/w/index.php?title={UrlEncode:{R:1}}" />
</rule>

到目前为止我尝试过什么

我尝试了入站和出站规则,但没有效果。

入站规则:

<rule name="Clean-Namespace" enabled="true">
<match url="^wiki/(Meetings:)(.*)" />
<action type="Rewrite" url="/wiki/{R:2}" />
</rule>

出站规则:

<outboundRules>
<rule name="Remove-Namespace" preCondition="IsHTML" enabled="true">
<match filterByTags="A" pattern="^wiki/Bar:(.*)" />
<action type="Rewrite" value="/wiki/{R:1}" />
</rule>
<preConditions>
<preCondition name="IsHTML">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules> 

我认为如果您只想重写Bar,则可以实现这一点。 您希望 URL 显示为 foo.com/wiki/Article_Title 并从/wiki/Bar:Article_Title 加载内容?

然后你应该将所有/wiki/Bar:Article_Title 请求重定向到 foo.com/wiki/Article_Title。然后将 foo.com/wiki/Article_Title 重写回/wiki/Bar:Article_Title 请求。

但请记住,这仅适用于静态命名空间。因为重写的请求在重定向之前无法获取原始请求的命名空间。

不确定以下规则是否符合您的要求 当您访问时

foo.com/wiki/Bar:Article_Title ------重定向----->foo.com/wiki/Article_Title -------重写------> foo.com/wiki/Bar:Article_Title-------rewrite---->foo.com/w/index.php?title=bar%3AArticle_Title

<rule name="redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{REQUEST_URI}" pattern="^/wiki/bar:Article_Title$" />
</conditions>
<action type="Redirect" url="wiki/Article_Title" redirectType="Temporary" />
</rule>
<rule name="rewrite">
<match url="^wiki/Article_Title$" />
<action type="Rewrite" url="wiki/bar:Article_Title" />
</rule>
<rule name="Clean-WikiArticlePages" enabled="true" stopProcessing="true">
<match url="^wiki/(.*)$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="/w/index.php?title={UrlEncode:{R:1}}" />
</rule>

最新更新