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

Iis 7 为IIS7网站配置带有重定向的自定义ASP 404页面,iis-7,error-handling,asp-classic,http-status-code-404,custom-error-pages,Iis 7,Error Handling,Asp Classic,Http Status Code 404,Custom Error Pages,我们正在将现有网站从IIS6迁移到IIS7,但在设置404错误页面时遇到了一些困难。我们的404 errorpage的工作原理如下: 自定义ASP页面根据“特殊”URL的短列表检查URL(例如) 如果URL已知,它将重定向到该页面的实际URL 否则,访问者将被重定向到带有404状态码的静态错误页面 对于IIS6,这就像广告宣传的那样有效,但是对于IIS7,有些事情已经改变了。当IIS7遇到定义了错误页面的状态代码时,它将始终显示配置的错误页面。如果我们的静态错误页面带有404状态码,这意味着

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

  • 自定义ASP页面根据“特殊”URL的短列表检查URL(例如)
  • 如果URL已知,它将重定向到该页面的实际URL
  • 否则,访问者将被重定向到带有404状态码的静态错误页面
对于IIS6,这就像广告宣传的那样有效,但是对于IIS7,有些事情已经改变了。当IIS7遇到定义了错误页面的状态代码时,它将始终显示配置的错误页面。如果我们的静态错误页面带有404状态码,这意味着IIS7将再次执行自定义ASP页面。这将导致无限重定向

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

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

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


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

我成功地使用了一个类似的设置,它是我从IIS 6迁移到IIS 7的。 My web.config有以下部分:

302(临时再直接)

301(永久再直接)

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


或者,您可以查看如何使用IIS加载项模块:。这将允许您设置自定义SEO友好URL。您可能会发现,这是您希望看到的东西,以改进您的应用程序,而不是解决您现有的问题,因为这可能需要一些时间来了解


有一些优秀的文章和关于如何使用此工具的信息。

前几周我遇到了一个客户的类似情况。解决方案是按如下方式配置您的

<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、呈现产品或列出产品类别等等。

302page.ASP是否重定向到另一个页面?如果是的话,它有404 HTTP状态码吗?是的,很抱歉刚刚在中编辑了那个位。302或404取决于代码中正在执行的操作。这正是我们想要的,但无法使其工作。您在IIS中对网站或应用程序池有任何特殊设置吗?例如,您的应用程序池使用经典还是集成管道模式?我们使用的应用程序池是集成管道模式。这些池是在IIS创建站点时自动创建和配置的-我们没有手动更改它们。我们的应用程序池在经典管道模式下运行。我会检查一下把它改成集成是否会有所不同。谢谢你的反馈。
Response.Status = "404 Not Found"
Response.AddHeader "Location", pagename
Response.Status="301 Object Moved"
Response.AddHeader "Location", pagename
Response.Status="301 Moved Permanently"
Response.AddHeader "Location", pagename
<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>