【问题标题】:IIS URL Rewrite enforce trailing forward slash not working with resources that 404IIS URL 重写强制尾部正斜杠不适用于 404 的资源
【发布时间】: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


【解决方案1】:

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

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

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

所以当你请求一个不存在的文件时,规则就会触发。

如果一个资源 404s 我只想要 404,就这么简单。

重写模块首先尝试重定向您的路径,因为它不考虑您请求文件或文件夹的请求,因此它会尝试到达路由。该路线不存在,因此您最终会得到 404。

其次,为什么我们有规则说如果它不是文件和 如果不是目录?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多