2

我们正在将现有网站从IIS6迁移到IIS7,但在设置404错误页面时遇到了一些困难。我们的404-的errorPage是这样工作的:为IIS7网站配置带重定向的自定义ASP 404页面

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

随着IIS6的这个作为广告,但与IIS7有些事情已经改变。 IIS7在遇到定义了错误页面的状态码时,将始终显示已配置的错误页面。如果我们使用404-statuscode的静态错误页面,这意味着IIS7将再次执行自定义ASP页面。这导致无限重定向。

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

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

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

任何人都可以推荐另一种方法来解决我们的问题?

回答

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

+0

302page.asp重定向到另一页?如果是这样,它是否有404 HTTP状态码? – Arjen 2011-05-16 12:55:44

+0

是的,对不起,只是编辑了302或404中的那一位,这取决于代码中的内容。 – 2011-05-16 12:58:52

+0

这正是我们正在寻找,但无法让它工作。您在网站或应用程序池的IIS中是否有任何特殊设置?例如,您的应用程序池是使用经典还是集成管道模式? – Arjen 2011-05-16 13:15:47

0

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

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

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> 

这适用于具有“友好”的网址,并在那里他们使用404处理器页面解析URL和渲染产品或列表Cactushop(写在传统的ASP)产品类别等。