为什么重定向会在URL中缺少尾部斜杠(/)时发生?

时间:2015-04-06 09:44:09

标签: asp.net redirect http-status-code-301 trailing-slash

如果URL中缺少尾部斜杠(/),则会发生最浪费的重定向之一,否则应该有一个。例如,转到 http://example.com/action 会产生301响应包含重定向到 http://example.com/action/ (注意添加的尾部斜杠)。

那么它背后的原因是什么以及如何在Asp.Net应用程序的情况下解决它。任何想法!!

3 个答案:

答案 0 :(得分:0)

您所描述的内容实际上是一件好事,并建议在网络上使用。 来自nibbler测试网站:“搜索引擎可能会将这些视为具有重复内容的单独页面,而这些内容可能会受到惩罚。”

301(永久重定向)仅在服务器btw上发生一次。它由用户的浏览器缓存,用户将被定向到正确的用户,而无需再次使用服务器。所以不要太担心(这不是一个302临时重定向)

但我也很好奇这发生了什么。我没有立即在我的路由中看到这一点。如果有人知道,请分享。

更新:显然你有这个属性

routes.AppendTrailingSlash = true;

也许这会导致效果?

答案 1 :(得分:0)

它遵循Unix路径逻辑。没有尾部斜杠的URI指向一个文件,并且尾部斜杠是目录。

如果您要使用尾部斜杠命中URI,并且在服务器上设置了目录列表,您将看到该路径下的所有文件。否则,可能会抛出重定向301或302以指示客户端需要使用其他位置发送请求。

从客户端的角度来看,这两个URI在网络上可能是相同的。因此,服务器大多数时间而不是失败将重定向到另一个位置。当然它是可配置的。

虽然我不是ASP的专家,但绝对可以在服务器上以配置或编程方式控制重定向。

答案 2 :(得分:0)

它是asp.net中StaticFileHandler的一部分,因此我认为您不能(轻松)对其进行更改。这就是默认的静态文件HTTP处理程序。

行为的根源是以下行,可以在applicationhost.config中找到该行:

<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule">

我怀疑此处导致重定向的特定模块是DefaultDocumentModule,但这需要进一步调查以确认。

您可以通过删除DefaultDocumentModule并将此行更改为

来进行测试
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DirectoryListingModule">

它可能会破坏您的网站,但重定向将消失。