我的站点中有不止一张重写 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/