【发布时间】:2013-09-09 14:17:32
【问题描述】:
我正在尝试让 IIS URL 重写模块在我的 URL 上强制使用尾部正斜杠,以便将对 mysite.com/bla 的请求转换为 mysite.com/bla /。
我正在使用如下所示的规则,这是 IIS URL 重写向导为这种情况设置的规则,并且一切正常,但前提是文件存在。一旦我们遇到 404 情况,就会在请求的末尾附加一个正斜杠。
<rule name="Add trailing slash" stopProcessing="true">
<match url="(.*[^/])$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule>
使用上述规则会发生以下情况:
- www.mysite.com/bla - 重定向到 www.mysite.com/bla/(正是我 想要)
- www.mysite.com/bla/ - 保持原样(正是我 想要)
- www.mysite.com/bla/myimg.jpg - 只要 myimg.jpg 存在就保持原样
- www.mysite.com/bla/myimg.jpg - 如果 myimg.jpg 不存在,则重定向到 www.mysite.com/bla/myimg.jpg/
首先,知道为什么会发生这种情况以及如何预防吗?如果一个资源 404s 我只想要它到 404,就这么简单。或者,如果对目录的请求没有尾部正斜杠,我只希望它附加。
其次,为什么我们同时规定如果它不是文件和如果它不是目录?当然,我们应该说它是否不是一个文件,如果它是一个目录(或者我误解了什么?)。
感谢任何帮助。
【问题讨论】:
-
为了增加混乱,IIS 有一个名为“Courtesy Redirects”的东西,它会自动在文件夹中添加一个尾部斜杠:support.microsoft.com/en-us/help/298408/…——所以我怀疑你的前三个在这种情况下,此规则不会触发,您只是看到 IIS 默认行为...
标签: iis url-rewriting url-rewrite-module