【问题标题】:Configuring custom ASP 404 page with redirect for IIS7 website为 IIS7 网站配置带有重定向的自定义 ASP 404 页面
【发布时间】:2011-08-26 09:26:06
【问题描述】:

我们正在将现有网站从 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 重定向。

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

【问题讨论】:

    标签: iis-7 error-handling asp-classic http-status-code-404 custom-error-pages


    【解决方案1】:

    前一周我遇到了一位客户的类似情况。解决方案是将您的&lt;httpErrors&gt; 配置如下:

    <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>
    

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

    【讨论】:

      【解决方案2】:

      我成功使用了从 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 站点的应用程序池使用集成管道模式。并附上网站调试部分的设置。

      【讨论】:

      • 302page.asp 重定向到另一个页面?如果有,它是否有 404 HTTP 状态码?
      • 是的,抱歉刚刚编辑了那个位。302 或 404 取决于代码中正在执行的操作。
      • 这正是我们正在寻找的,但无法让它发挥作用。您在 IIS 中是否对网站或应用程序池有任何特殊设置?例如,您的应用程序池是使用经典还是集成管道模式?
      • 我们使用的应用程序池是集成管道模式。池是由 IIS 创建站点时自动创建和配置的 - 我们没有手动更改它们。
      • 我们的应用程序池在经典管道模式下运行。我会检查将其更改为集成是否会有所作为。感谢您的反馈。
      【解决方案3】:

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

      有一些优秀的文章,video tutorials 以及如何使用这个工具的信息。

      【讨论】:

        猜你喜欢
        • 2019-02-03
        • 2015-04-17
        • 2012-10-01
        • 1970-01-01
        • 2014-10-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-14
        • 2013-07-25
        相关资源
        最近更新 更多