【问题标题】:How does the IIS 'courtesy redirect' affect ASP.NET MVC or other web frameworks?IIS“礼貌重定向”如何影响 ASP.NET MVC 或其他 Web 框架?
【发布时间】:2010-03-25 16:26:08
【问题描述】:

我在http://support.microsoft.com/kb/298408 中读到,IIS6.0 会自动响应缺少点的 URL 的“礼貌重定向”(HTTP 301)。

当浏览器请求诸如http://www.servername.de/SubDir 之类的URL 时,浏览器将被重定向到http://www.servername.de/SubDir/。 URL 末尾包含一个斜杠。

Internet 信息服务器 (IIS) 首先将 SubDir 视为应返回给浏览器的文件。如果找不到此文件,IIS 将检查是否存在具有此名称的目录。如果存在具有此名称的目录,则会向浏览器返回带有 302“对象已移动”响应消息的礼貌重定向。此消息还包含有关带有尾部斜杠的目录的新位置的信息。反过来,浏览器开始对带有斜杠的 URL 发起新的 GET 请求。

这种行为如何与 ASP.NET MVC 等框架相交,后者通常使用不需要或使用点的 URL?

具体来说... ASP.NET MVC 在安装时会“关闭”IIS6.0 的这个功能吗?如果有,怎么做?

我猜不是,而是在 IIS 中完成的请求路由在执行重定向之前将请求发送到 ASPNET。如果有人能解释一下,我将不胜感激。

【问题讨论】:

标签: asp.net-mvc iis


【解决方案1】:

ASP.NET MVC 中的路由引擎允许您在应用程序中使用无扩展路由。您可以通过创建wildcard mapping 将 IIS 6.0 配置为处理此类 URL,这会将 aspnet_isapi 过滤器与所有请求相关联,这意味着所有内容都通过 ASP.NET 引擎进行处理。

当安装在具有 IIS 6.0 的服务器上时,ASP.NET MVC 不会对 IIS 元数据库进行任何修改,这意味着无扩展路由将不起作用。

我的建议是仅在 IIS 7 及更高版本上使用无扩展名路由,并为 IIS 6.0 提供一些扩展名(如 .mvc)。这避免了通配符映射以及让 ASP.NET 引擎为静态文件(如图像、css、javascript、...

【讨论】:

  • 我知道有些人用过.mvc,然后为IIS6应用了一个URL重写器,比如IIRF (iirf.codeplex.com) 以获得相同的视觉效果,而不会对静态文件产生影响。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多