我已经阅读了 IIS rewrite map condition
的几种组合的前 30 个谷歌点击量等等,但我在 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 )但是,正如我在那里评论的那样,这似乎与该文本之前给出的具体示例有关,而不是批发“这永远行不通”。
我错过了什么?必须有一些方法可以做到这一点;我错过了一些明显的东西吗?
最佳答案
这应该这样做:
<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>
你很亲近;我只需要做三个小改动:
+?
在规则匹配中 {R:1}
在条件输入 我分享了您在难以找到像样的文档方面的经验;在以下文章的帮助下,我不得不尝试自己的方法:
关于regex - 在 IIS7 中重写映射 - 如何使匹配可选地包含尾部斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22611622/