【发布时间】:2014-03-24 14:01:47
【问题描述】:
我已经阅读了 IIS rewrite map condition 等多个组合的前 30 个 Google 点击,但我在 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>
现在这工作得很好,除了我能找到使/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>
考虑到我首先使用正则表达式来匹配它们,这看起来非常不雅。将/? 添加到条件输入或条件模式似乎不起作用。
我看到the answer 到IIS7 Rewrite Map Regex? 提到不能使用正则表达式(引用Using Rewrite Maps in URL Rewrite Module)但是,正如我在那里评论的那样,这似乎与该文本之前给出的具体示例有关,而不是而不是批发“这永远行不通”。
我错过了什么?必须有一些方法可以做到这一点;我错过了什么明显的东西吗?
【问题讨论】:
标签: regex iis-7 url-rewrite-module rewritemap