我正在尝试让 IIS URL Rewrite 模块在我的 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,就这么简单。或者,如果对目录的请求没有尾部正斜杠,我只希望它附加。
其次,为什么我们既有规则说如果它不是文件又如果它不是目录?当然,我们应该说它是否不是一个文件,如果它是一个目录(或者我误解了什么?)。
任何帮助表示赞赏。