Web配置重写规则不显示正确的页面

时间:2015-10-13 17:47:55

标签: iis url-rewriting web-config iis-7.5 mediawiki

我试图在Mediawiki网站上重写网址,并且根据失败的请求日志文件输出,一切看起来都在工作。然而,显示的页面是原始页面,而不是重写中的URL。基本上我想要

www.website.com/State/City/Category

显示页面在

www.website.com/index.php?title=Special:RunQuery/CategoryPage&CategoryPage[State]= State&CategoryPage[City]=City&CategoryPage[Category]=Category&wpRunQuery=true

相反它似乎显示在

的页面 www.website.com/index.php?title=State/City/Category

打印_SERVER将QUERY_STRING显示为Special:RunQuery页面,否则所有其他变量都显示index.php或/ State / City / Category。我的web.config重写规则如下所示:

<rewrite>
    <rules>
        <rule name="Root Hit Redirect" stopProcessing="true">
            <match url="^$" />
            <action type="Rewrite" url="/index.php?title=Main_Page" />
        </rule>
       <rule name="RedirectUserFriendlyURL1" stopProcessing="true">
           <match url="^index\.php$" />
           <conditions>
               <add input="{REQUEST_METHOD}" pattern="^POST$" />
               <add input="{QUERY_STRING}" pattern="^title=([^=&amp;]+)$" />
           </conditions>
           <action type="Redirect" url="{C:1}" appendQueryString="false" />
       </rule>
       <rule name="RewriteUserFriendlyCategoryURL" stopProcessing="true">
            <match url="^([^/]+)/([^/]+)/([^/]+)/?$" />
            <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
            </conditions>
            <action type="Rewrite" url="index.php?title=Special:RunQuery/CategoryPage&amp;CategoryPage[State]={UrlDecode:{R:1}}&amp;CategoryPage[City]={UrlDecode:{R:2}}&amp;CategoryPage[Category]={UrlDecode:{R:3}}&amp;wpRunQuery=true" />
        </rule>
       <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
           <match url="^(.+)$" />
           <conditions>
               <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
               <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
           </conditions>
           <action type="Rewrite" url="index.php?title={UrlDecode:{R:1}}" />
       </rule>
    </rules>
</rewrite>

感谢任何有助于解决这个问题的帮助。现在已经把我的大脑绞了2天。谢谢!

2 个答案:

答案 0 :(得分:0)

我在本地尝试了您的规则,并按照您的指示工作,请求: 测试:
RequestURL = “/州/城市/类别”

会正确地将其重写为: “?本地主机:80 / index.php的标题=特殊:RunQuery / CategoryPage&安培; CategoryPage [状态] =状态&安培; CategoryPage [市] =市&安培; CategoryPage [类别] =类别&安培; wpRunQuery =真”

我的建议是使用失败的请求跟踪:http://www.iis.net/learn/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules 这应该告诉你究竟发生了什么。

答案 1 :(得分:0)

好吧,我想,因为Carlos说web.config看起来不错,它必须是Mediawiki,而且我确定找到了一个检查并使用$ _SERVER [&#39; REQUEST_URI&#39;]的地方。这可能会在Apache Rewrite for Apache上更改,但它不在IIS中。幸运的是,我设法通过LocalSettings.php中的更改来修复它,所以对于核心代码没有mod。因此,如果其他人对IIS和Mediawiki,IIS或任何其他PHP Apache中心站点有此问题,您可以在下面添加以下代码:

$_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME']."?".$_SERVER['QUERY_STRING'];