IIS7中有多个rewriteMaps,只有一个响应

时间:2014-03-18 11:27:57

标签: iis-7 url-rewrite-module

我的网站中有多个重写地图,但只有一个地图似乎有效。

Web.config文件的相关块读取:

<system.webServer>
    <rewrite>
        <rewriteMaps configSource="rewriteMaps.config"/>
        <rules>
            <rule name="Locale redirects">
                <match url="^/?[a-z][a-z](-[a-z][a-z])?/?$"/>
                <conditions>
                    <add input="{LocaleRedirects:{REQUEST_URI}}" pattern="(.+)"/>
                </conditions>
                <action type="Redirect" url="{C:1}" appendQueryString="true"/>
            </rule>
            <rule name="Short URL redirects">
                <match url="^/?[a-z][a-z](-[a-z][a-z])?/?$"/>
                <conditions>
                    <add input="{ShortURLs:{REQUEST_URI}}" pattern="(.+)"/>
                </conditions>
                <action type="Redirect" url="{C:1}" appendQueryString="true"/>
            </rule>
        </rules>
    </rewrite>
</system.webServer>

我的文件rewriteMaps.config(为了演示目的删除了几行)读取:

<rewriteMaps>
    <rewriteMap name="ShortURLs">
        <add key="getstarted" value="/en-us/get-started/"/>
        <add key="support" value="/en-us/support/"/>
        <add key="terms" value="/en-us/terms-and-conditions/"/>

        <add key="getstarted/" value="/en-us/get-started/"/>
        <add key="support/" value="/en-us/support/"/>
        <add key="terms/" value="/en-us/terms-and-conditions/"/>
    </rewriteMap>
    <rewriteMap name="LocaleRedirects">
        <add key="/jp" value="/ja-JP/"/>
        <add key="/jp/" value="/ja-JP/"/>
        <add key="/kr" value="/ko-kr/"/>
        <add key="/kr/" value="/ko-kr/"/>
    </rewriteMap>
</rewriteMaps>

所有语言环境重定向都运行良好;但是,没有一个短网址正在运行;他们只是回复了404。

我做的事情显然是错的吗?或者是否有一些复杂的使用我以某种方式遗漏的多个重写地图?

1 个答案:

答案 0 :(得分:1)

此处的重写规则存在一些问题:

1)对于短网址重定向,您匹配字符串,例如/ en-gb或/ en-gb /这就是您的本地重定向正在工作的原因,但是当字符串为&#34; getstarted&#34;

<rule name="Short URL redirects">
     <match url="^/?[a-z][a-z](-[a-z][a-z])?/?$"/>

应为<match url="(.*)"或者如果您更喜欢注册为url="^/.*/?",则会匹配/ getstarted或/ getstarted /。

2)在你的重写图中,你需要将key指定为/ getstarted而不是getstarted。

<rewriteMap name="ShortURLs">
        <add key="getstarted" value="/en-us/get-started/"/>

应该是:

<rewriteMap name="ShortURLs">
        <add key="/getstarted" value="/en-us/get-started/"/>