在IIS7中重写地图 - 如何使匹配选项包含尾部斜杠?

Owe*_*ker 12 regex iis-7 rewritemap url-rewrite-module

我已经阅读过几个组合的前30个谷歌点击IIS rewrite map condition等等,但我找不到任何体面的文档,无论是在microsoft.com网站还是其他地方.

我在IIS7中有一堆重写映射,我想处理它们,而不管它们是否后跟一个尾部斜杠.所以www.foo.com/bar,www.foo.com/bar/两者都应该符合规则.

<rewrite>
    <rewriteMaps>
        <rewriteMap name="ShortURLs">
            <add key="/terms" value="/en-us/terms-and-conditions/"/>
            <add key="/privacy" value="/en-us/privacy-and-cookies/"/>
            <add key="/buy" value="/en-us/where-to-buy/"/>
        </rewriteMap>
    </rewriteMaps>
    <rules>
        <rule name="Short URL redirects">
            <match url="^/?(.+)/?$" />
            <conditions>
                <add input="{ShortURLs:{REQUEST_URI}}" pattern="(.+)"/>
            </conditions>
            <action type="Redirect" url="{C:1}" appendQueryString="true"/>
        </rule>
    </rules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)

现在这非常有效,除了我能找到/terms/匹配重写映射中第一个键的唯一方法是复制映射,使其显示为:

<rewriteMap name="ShortURLs">
    <add key="/terms" value="/en-us/terms-and-conditions/"/>
    <add key="/privacy" value="/en-us/privacy-and-cookies/"/>
    <add key="/buy" value="/en-us/where-to-buy/"/>

    <add key="/terms/" value="/en-us/terms-and-conditions/"/>
    <add key="/privacy/" value="/en-us/privacy-and-cookies/"/>
    <add key="/buy/" value="/en-us/where-to-buy/"/>
</rewriteMap>
Run Code Online (Sandbox Code Playgroud)

考虑到我首先使用正则表达式匹配它们,这看起来非常荒谬.添加/?条件输入或条件模式似乎不起作用.

我已经看到了答案,以IIS7改写地图的正则表达式?提到正则表达式不能使用(引用在URL重写模块中使用重写映射)但是,正如我在那里评论的那样,这似乎与在该文本之前给出的具体示例相关,而不是批发"这可能永远不会起作用" .

我错过了什么?必须有一些方法来做到这一点; 我错过了一些明显的东西吗

Ruu*_*man 17

这应该这样做:

<rewrite>
    <rewriteMaps>
        <rewriteMap name="ShortURLs">
            <add key="terms" value="/en-us/terms-and-conditions/"/>
            <add key="privacy" value="/en-us/privacy-and-cookies/"/>
            <add key="buy" value="/en-us/where-to-buy/"/>
        </rewriteMap>
    </rewriteMaps>
    <rules>
        <rule name="Short URL redirects">
            <match url="^(.+?)/?$" />
            <conditions>
                <add input="{ShortURLs:{R:1}}" pattern="(.+)" />
            </conditions>
            <action type="Redirect" url="{C:1}" appendQueryString="true"/>
        </rule>
    </rules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)

你很亲密; 我只需做三个小改动:

  • 删除重写映射中键中的前导斜杠
  • +?在规则的匹配中使用非贪婪量词
  • {R:1}在条件输入中使用了对匹配的后向引用

我分享了你找不到合适文档的经验; 在以下文章的帮助下,我不得不试验一下: