【发布时间】:2016-11-17 10:03:03
【问题描述】:
我知道这可以通过 URL 重写来完成,但这是一台客户机器,除非他们真的需要,否则他们不想安装扩展程序。该应用程序在原始域名下的文件夹中运行,如下所示:
domain.com/app1
如果向domain.com/app1 发出请求,我不希望它被永久重定向到domain.com/app1/。
应用程序和 IIS:
- .NET Framework 4.5
- IIS 7.0
不得已的示例规则:
<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>
【问题讨论】:
-
出于好奇,为什么?在 RFC 1738 下,斜杠只能用作路径组件分隔符,作为终结符(您建议的用途)它们是没有意义的:stackoverflow.com/questions/5948659/… - 您所提议的只会添加额外的 HTTP 重定向,这会增加用户延迟 -操作并最终损害用户体验。
-
还有一个风险是不符合标准的 UA(其中有 很多 个)可能会截断它发出的任何请求中的任何尾部斜杠,从而陷入困境无限重定向循环。请不要这样做。
-
@Dai 一个非常有效的问题。这是由于我们正在使用的 Angular 的当前配置。如果从子目录运行应用程序时未添加尾部斜杠,则角度路由将进入无限循环,调用不存在的路由。无论如何都不理想,但情况就是这样。