为IIS7网站配置重定向的自定义ASP 404页面

时间:2011-05-16 11:50:32

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

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

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

使用IIS6时,这可以像宣传的那样工作,但是对于IIS7,一些事情已经发生了变化。当IIS7遇到定义了errorpage的状态码时,它将始终显示已配置的错误。如果我们的静态错误与404状态代码,这意味着IIS7将再次执行自定义ASP页面。这导致无限重定向。

我们发现可以通过在Web.Config

中添加设置来规避此行为
<system.webServer>
  <httpErrors existingResponse="PassThrough" />
</system.webServer>

但是,添加此内容后,我们的自定义ASP页面拒绝重定向。在与Fiddler核实后,似乎IIS7强制404状态代码,覆盖我们的302重定向。

有人可以推荐另一种方法来解决我们的问题吗?

3 个答案:

答案 0 :(得分: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站点的应用程序池使用集成管道模式。附件是网站调试部分的设置。

settings for debugging section for site

答案 1 :(得分: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>

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

答案 2 :(得分:1)

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

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