IIS URL重写强制尾部正斜杠不使用404

IIS URL重写强制尾部正斜杠不使用404,iis,url-rewriting,url-rewrite-module,Iis,Url Rewriting,Url Rewrite Module,我正试图让IIS URL重写模块在我的URL上强制使用前斜杠,以便将对mysite.com/bla的请求转换为mysite.com/bla/ 我正在使用如下所示的规则,这是IIS URL重写向导针对这种情况设置的规则,并且一切正常,但仅当文件存在时。一旦出现404情况,请求的末尾就会附加一个正斜杠 <rule name="Add trailing slash" stopProcessing="true"> <match url="(.*[^/])$" /> <

我正试图让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/
首先,你知道为什么会发生这种情况,以及我如何预防它吗?如果一个资源是404,我只希望它是404,就这么简单。或者,如果对目录的请求没有尾部正斜杠,我只希望它追加

第二,如果不是一个文件,为什么会有规则说,如果不是一个目录,为什么会有规则说?当然,我们应该说,如果它不是一个文件,如果它是一个目录(或者我误解了什么?)

感谢您的帮助

首先,你知道为什么会发生这种情况,以及我如何预防它吗

发生这种情况的原因是,如果请求的路径是现有文件或文件夹,则不会触发规则:

<conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>

因此,当您请求一个不存在的文件时,规则将触发

如果一个资源是404,我只希望它是404,就这么简单

<> >重写模块首先尝试重定向路径,因为它不考虑请求文件或文件夹,所以它试图到达一条路径。路线不存在,所以你最终会得到404

第二,为什么我们既有规则说如果它不是一个文件又有规则 如果不是目录


因为如果您请求
www.mysite.com/bla/myimg.jpg
,您可能希望显示
bla/myimg.jpg
,而不是将
bla/myimg.jpg
视为路由。目录也是如此。

为了增加这里的混乱,IIS有一个称为“礼貌重定向”的东西,它会自动在文件夹中添加一个尾随斜杠,如下所示:--所以我怀疑在前三种情况下,此规则不会触发,而您只是看到IIS的默认行为。。。