非aspx页面的404重定向

Posted

技术标签:

【中文标题】非aspx页面的404重定向【英文标题】:404 Redirecting for non aspx pages 【发布时间】:2012-06-18 05:34:06 【问题描述】:

我正在使用下面的 web.config 代码将对丢失页面的请求重定向到 404 错误处理页面:

<customErrors mode="On" defaultRedirect="404.aspx" redirectMode="ResponseRewrite">
  <error statusCode="404" redirect="404.aspx"/>
</customErrors>

当我查找诸如“missing.aspx”之类的页面时它可以正常工作,但它不适用于没有“.aspx”扩展名的页面,例如“missing.asp”或只是“missing”。当它不起作用时,它只会加载一个标准的 IIS 7.5 错误页面。

我做错了什么?我正在使用 .net 4。我注意到其他人问了同样的问题,但他们没有得到答案。

谢谢!

【问题讨论】:

尝试删除redirectMode="ResponseRewrite" 我尝试使用此问题中的信息,但未能成功。请您看一下***.com/questions/25798775/… 这对我有用 我有一个网站项目***.com/a/48661494/6665876 【参考方案1】:

将以下内容添加到 Web.config:

<system.webServer>    
    <httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL" >
      <remove statusCode="404" />
      <error statusCode="404" path="/Default.aspx" responseMode="Redirect" />
    </httpErrors>
  </system.webServer>

我取了Osprey的代码,并添加了responseMode="Redirect"来解决只显示页面源代码的问题。

【讨论】:

【参考方案2】:

正如dbaseman 所说,这是因为非asp.net 文件不会调用asp.net 处理程序。强制 asp.net 处理程序对所有请求进行操作的一种简单方法是在 web.config 中设置以下内容。

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
</system.webServer>

这告诉 IIS 为所有请求(例如 .html、.jpg、.css、.js 等)运行所有托管模块。这通常不受欢迎,因为它只会引入额外的处理和延迟。

http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx

另一个尝试的选项(比上面更干净)作为答案发布在这里:https://***.com/a/6661699/701062

【讨论】:

我尝试使用您写的内容,但无法正常工作。你介意看看***.com/questions/25798775/… 我爱你...非常喜欢 Gary S.【参考方案3】:

原因是非 ASPX 扩展永远不会进入 ASP.NET 处理程序;您看到的那些错误来自 IIS。在 web.config 的 system.webServer 下有一个单独的部分 httpErrors,您需要对其进行配置以处理这些错误。请参阅here 了解更多信息。

链接示例:

<configuration>
   <system.webServer>
      <httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" >
         <remove statusCode="500" />
         <error statusCode="500"
            prefixLanguageFilePath="C:\Contoso\Content\errors"
            path="500.htm" />
       </httpErrors>
   </system.webServer>
</configuration>

【讨论】:

我添加了下面的代码,但现在不是运行错误处理页面,而是显示页面的源代码(尝试加载不存在的非 aspx 页面时)。 &lt;system.webServer&gt; &lt;httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL" &gt; &lt;remove statusCode="404" /&gt; &lt;error statusCode="404" path="404.aspx" /&gt; &lt;/httpErrors&gt; &lt;/system.webServer&gt; 这是更好的答案,因为它不依赖于通过 ASP.NET 管道发送所有请求。 @Osprey - 这是因为errorMode被设置为“DetailedLocalOnly”这个设置说,嘿,如果请求来自托管文件的机器,请提供一些详细信息,否则,显示我定义的500页面。这在调试场景中很有用。您可以将此设置更改为“自定义”,它将始终显示友好的错误消息。 这不起作用。当问题专门针对 404 错误时,您为什么要添加 505? @JGallardo 不能在本地工作,但应该可以在服务器上工作。我假设您可以找到/替换“404”,或者这对您来说太多了吗? @McGarnagle 我显然用 404 替换了。然后我将它添加到远程服务器但仍然没有工作。

以上是关于非aspx页面的404重定向的主要内容,如果未能解决你的问题,请参考以下文章

使用 301 重定向重定向 404 是将现有页面重定向到主页

react嵌套路由(多重路由)重定向,重定向到404页面,路由重定向

使用 .htaccess 重定向 404 而不重定向尾部斜杠

aspx 页面重定向到新页面

如何在控制器操作中重定向到 aspx 页面

.htaccess 重定向到 404 页面 RewriteRule