iis-7 - IIS7 中的多个 rewriteMaps,只有一个响应

标签 iis-7 url-rewrite-module

我的站点中有不止一张重写 map ,但似乎只有一张 map 有效。

Web.config 文件的相关 block 如下:

<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) 对于短 URL 重定向,您正在匹配字符串,例如/en-gb 或/en-gb/这就是为什么您的本地重定向有效但在字符串为“getstarted”时无效

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

应该是<match url="(.*)"或者如果你更喜欢 reg ex 作为 url="^/.*/?"这将匹配/getstarted 或/getstarted/。

2) 在你的 rewritemap 中,你需要将键指定为/getstarted 而不是仅仅 getstarted。

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

应该是:

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

关于iis-7 - IIS7 中的多个 rewriteMaps,只有一个响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22477976/

相关文章:

c# - 如何让另存为对话框出现 "early"?或者 : How to make Flush() behave correctly?

iis - 基于自定义 HTTP header 的 UrlRewrite 条件

regex - 使用网址重写将www添加到网址

c# - 多用户连接并同时进行 CRUD

IIS10 URL Rewrite 2.1 双编码问题

azure - Asp.Net Core HTTP 错误 500.53 - Azure 应用服务上的 URL 重写模块错误

iis - 在 IIS 中需要 SSL 和使用 URL 重写之间的区别

asp.net - 将 ASP.NET MVC 应用程序放在主 MVC 应用程序的子目录中?

configuration - 错误 : IIS7 managed requests

c# - 使用 ASP.NET 代码中的凭据从网络位置读取文件