正在本地运行以下IIS URL重写安装程序,但无法使其工作(从web.config):
<rewrite>
<rewriteMaps>
<rewriteMap name="StaticRedirects">
<add key="^tvb/" value="/tv/" />
</rewriteMap>
</rewriteMaps>
<rules>
<rule name="StaticRedirectsRule" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{StaticRedirects: {REQUEST_URI}}" matchType="Pattern" pattern="(.+)" ignoreCase="true" negate="false" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>尝试打开url http://localhost/tvb/或http://localhost/tvb/?a=b会返回404错误,而不是将我重定向到http://localhost/tv (带或不带查询字符串)。
我在stackoverflow上找到了类似的帖子,并尝试了他们的建议:回收应用程序池,重启IIS服务,用URL和/或REQUEST_FILENAME替换REQUEST_URI,但这些更改都没有起到作用。
有没有人能看到我哪里出了问题?
发布于 2017-08-08 04:24:06
我也遇到了同样的问题,用PATH_INFO替换REQUEST_URI解决了这个问题。
这里是链接https://forums.iis.net/post/1883056.aspx
推理:“这是因为REQUEST_URI包含整个请求的URL,其中包含查询字符串。由于重写映射中的键不包含查询字符串,因此映射查找失败。”
发布于 2011-11-03 02:23:30
好吧,我自己找到了一个解决方案,所以我做了以下工作:
首先,rewriteMap似乎不支持正则表达式,所以这不起作用:
<add key="^tvb/" value="/tv/" />相反,它必须是这样的:
<add key="/tvb/" value="/tv/" />此外,自从IIS7 rewrite2.0模块(和文档)发布以来,REQUEST_URI变量似乎已经改变了行为。
以前,REQUEST_URI只包含url的路径,不包含域和查询字符串。
现在,显然IIS7中的REQUEST_URI的工作原理与Apache中的类似,即它也包含查询字符串,所以难怪这部分不能工作:
<add input="{StaticRedirects: {REQUEST_URI}}" ... />相反,我不得不将其更改为:
<add input="{StaticRedirects: {SCRIPT_NAME}}" ... />现在重定向可以工作了,不管有没有查询字符串!
希望这对某些人有帮助。
刚刚在serverfault上找到了这个:IIS Rewrite, rewrite maps and query strings。
https://stackoverflow.com/questions/7964303
复制相似问题