IIS 7.5为什么会给文件夹添加尾部斜杠?我们可以禁用URL重写规则中移除尾部斜杠的友好重定向吗?

22
IIS会在目录上执行URL清理,通过添加尾部斜杠。请参考IIS 6的旧文档: 请求无尾随斜杠的文件夹时,IIS会生成礼貌重定向
  1. 为什么?这个意图仍然相关吗?
  2. 有任何安全方面的影响吗?
  3. 如何禁用它以使其与URL Rewrite规则“RemoveTrailingSlashRule”一起使用
当您在具有URL Rewrite 2的IIS 7.5下添加规则时,该规则将不适用于目录(使用IsDirectory)和文件夹(使用IsFolder)。
查看此警告以添加一个规则来附加或删除尾随斜杠符号: 查看此警告以添加一个规则来附加或删除尾随斜杠符号 这将创建RemoveTrailingSlashRule1: 编辑Inbound Rule RemoveTrailingSlashRule1

很遗憾看到这个问题没有答案。我也遇到了这个问题。你能找到任何解决方法或更多关于此的信息吗? - Stephen McDaniel
抱歉,我也一直在苦苦思索这个问题。我认为应用程序是问题所在,因为IIS将其视为类似于网站根目录,需要尾随斜杠。我甚至在主网站中尝试了一个“爬取”页面,从子网站进行请求/响应,但是无论规则位于服务器级别还是站点级别,无论是IIS Rewrite还是Helicon Ape等,IIS似乎都会在任何重写规则生效之前进行重定向。 - goodeye
2个回答

7
我有一个针对儿童IIS应用程序的具体情况的答案,链接在这里:https://dev59.com/Vn3aa4cB1Zd3GeqPe5H_#25817317。子应用程序似乎是通常的罪魁祸首,但在这个问题中没有明确描述。
为了尝试回答这些问题,这里是我多年来与IIS和Microsoft打交道的经验。我没有硬性的来源可以引用;其中一些只是我的直觉。
  1. 为什么?目的仍然相关吗?
我认为它源自最初的“默认文档”功能,即index.html。网站希望他们的主页只是域名,然后扩展到子文件夹。使用url重写,意图不再相关-您可以随心所欲地重写,并且更愿意IIS离开。通常希望友好的URL,没有尾随斜杠(除了域名/网站根目录-即使一些浏览器像Chrome会隐藏它,也需要有尾随斜杠)。
  1. 是否存在任何安全问题?
我认为唯一的安全影响是原始目录浏览。如果您忘记设置默认文档,并且打开了目录浏览,则人们可以浏览您的网站文件。据我所知,长期以来已将目录浏览禁用为默认设置。
对于任何请求,无论是带斜杠还是不带斜杠,是否进行url重写,您的服务器和代码都需要经得起坏请求的考验。这适用于所有情况,而不仅仅是特定于斜杠的情况。http://xkcd.com/327/ 如何禁用它以使其与URL Rewrite规则“RemoveTrailingSlashRule”一起运行?
如果问题涉及子应用程序,则在此处提供答案:https://dev59.com/Vn3aa4cB1Zd3GeqPe5H_#25817317 总结是,在IIS中:
- 禁用子应用程序的默认文档功能。 - 使用Url Rewrite,创建一个规则将空请求重写(而不是重定向)到default.aspx。
如果这个问题是针对更一般的问题,包括常规的子文件夹,即使不是子应用程序,请考虑从规则中删除“不是目录”,并在看到目录时进行重定向。这可能有效,也可能创建一个无限重定向循环,我不确定。

1
感谢您的见解。毫无疑问是一项宝贵的贡献。 - TheSoftwareJedi

0
这个节省了我们的时间:

如果这个问题是一个更一般性的问题,包括常规的子文件夹,即使不是一个子应用程序,考虑从规则中删除“不是一个目录”,并让它在看到一个目录时也进行重定向。这可能起作用,也可能创建一个无限重定向循环,我不确定。

为了帮助我们在谷歌上索引我们的Angular 17 SSR网站,因为它生成了一个与路由同名的文件夹。设置

 <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="false" />

将重写规则中的组合设置为false就解决了问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接