2

我们正在将现有网站从 IIS6 迁移到 IIS7,但在设置 404 错误页面时遇到了一些困难。我们的 404-errorpage 是这样工作的:

  • 一个自定义的 ASP 页面会根据一个简短的“特殊”URL 列表(例如http://example.com/limited-offers)检查 URL。
  • 如果 URL 已知,它将重定向到该页面的实际 URL。
  • 否则,访问者将被重定向到带有 404 状态码的静态错误页面。

使用 IIS6,这就像宣传的那样工作,但使用 IIS7,有些事情发生了变化。IIS7 在遇到定义了错误页的状态码时,将始终显示配置的错误页。如果我们的静态错误页面带有 404-statuscode,这意味着 IIS7 将再次执行自定义 ASP 页面。这导致无限重定向。

我们发现可以通过在 Web.Config 中添加设置来规避这种行为

<system.webServer>
  <httpErrors existingResponse="PassThrough" />
</system.webServer>

然而,在添加这个之后,我们的自定义 ASP 页面拒绝重定向。在与 Fiddler 检查后,似乎 IIS7 强制使用 404 状态码,覆盖了我们的 302 重定向。

谁能推荐另一种方法来解决我们的问题?

4

3 回答 3

6

我成功使用了从 IIS 6 迁移到 IIS 7 的类似设置。我的 web.config 有以下部分;

<system.webServer>
    <httpErrors errorMode="Custom">
        <remove statusCode="500" subStatusCode="-1" />
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/302page.asp" responseMode="ExecuteURL" />
        <error statusCode="500" prefixLanguageFilePath="" path="/500page.asp" responseMode="ExecuteURL" />
        <error statusCode="500" subStatusCode="100" path="/500page.asp" responseMode="ExecuteURL" />
    </httpErrors>
<system.webServer>

我通过 IIS 管理器在相关站点上进行了配置,但如果您更容易,您可以通过 web.config 文件进行配置。

您可以根据应该是 301、302 还是 404 添加条件标头。

404;

Response.Status = "404 Not Found"
Response.AddHeader "Location", pagename

302(临时重定向);

Response.Status="301 Object Moved"
Response.AddHeader "Location", pagename

301(永久重定向);

Response.Status="301 Moved Permanently"
Response.AddHeader "Location", pagename

IIS 站点的应用程序池使用集成管道模式。并附上站点调试部分的设置。

站点调试部分的设置

于 2011-05-16T12:48:59.790 回答
2

前一周我遇到了一个客户的类似情况。解决方案是将您的配置<httpErrors>如下:

<httpErrors errorMode="Custom" existingResponse="Auto">

  <remove statusCode="404" subStatusCode="-1" />
  <error statusCode="404" 
         prefixLanguageFilePath="" 
         path="/404.asp" 
         responseMode="ExecuteURL" />

  <remove statusCode="500" subStatusCode="100" />
  <error statusCode="500" 
         subStatusCode="100" 
         prefixLanguageFilePath="" 
         path="/500-100.asp" 
         responseMode="ExecuteURL" />

</httpErrors>

这适用于具有“友好” url 的 Cactushop(用 Classic ASP 编写),它们使用 404 处理程序页面来解析 url 并呈现产品或列出产品类别等。

于 2012-10-28T23:19:14.457 回答
1

或者,您可以查看使用 IIS 插件模块:URLRewrite。这将允许您设置自定义的 SEO 友好 URL。您可能会发现这是您想要改进您的应用程序的东西,而不是作为您现有问题的修复,因为可能需要一些时间来学习。

有一些关于如何使用这个工具的优秀文章、视频教程和信息。

于 2011-05-16T13:12:11.547 回答