web.config没有转发到非.aspx页面上的404错误页面

时间:2014-09-12 00:05:58

标签: asp.net redirect web-config

目的

我希望所有丢失网页的网址都转发到我的根页{404}页面404error.aspx

问题

到目前为止,只有.aspx的网址才有效。例如,如果您输入4error.aspx,您将被重定向到错误页面。

/404error.aspx?aspxerrorpath=/4error.aspx

背景

我不是.NET开发人员,所以我接手了这个使用经典.aspx的项目。因此,我没有使用任何Microsoft产品在模板或框架中构建任何此类产品。我只是在Sublime文本中编码。

我已经研究过的

我查看了我在Google上发现的很多文章,但没有任何实际工作的完整示例。

代码

这是我在web.config

中开始的完整代码

的web.config

<configuration>
  <system.web>
    <customErrors mode="RemoteOnly" defaultRedirect="~/404error.aspx" />
      <globalization
        fileEncoding="utf-8"
        requestEncoding="utf-8"
        responseEncoding="utf-8"
        culture="en-US"
        uiCulture="de-DE"
      />
  </system.web>
</configuration>

我也从微软发现这个例子(404error.aspx是我的修改)
http://msdn.microsoft.com/en-us/library/vstudio/bb397417%28v=vs.100%29.aspx

web.config(2)

<configuration>
  <appSettings/>
  <connectionStrings/>
  <system.web>
    <compilation debug="true" />

    <!-- Turn on Custom Errors -->
    <customErrors mode="On" 
      defaultRedirect="/404error.aspx">
      <error statusCode="404" redirect="/404Error.aspx"/>
    </customErrors>

  </system.web>
</configuration>

这也没有处理没有.aspx

的网页

然后我从

尝试了这个例子

web.config(3)

<?xml version="1.0"?>
<configuration>
   <system.web>
    <customErrors mode="RemoteOnly" defaultRedirect="~/404error.aspx" />
    <error statusCode="404" redirect="~/404error.aspx" />
    <globalization
      fileEncoding="utf-8"
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      culture="en-US"
      uiCulture="de-DE"
    />
   </system.web>
   <system.webServer>
      <httpErrors>
        <remove statusCode="401" subStatusCode="-1" />
        <remove statusCode="403" subStatusCode="-1" />      
        <remove statusCode="404" subStatusCode="-1" />                
        <remove statusCode="500" subStatusCode="-1" />
          <!-- full url when responsemode is Redirect -->
        <error statusCode="401" path="http://foo.com/default.htm" responseMode="Redirect" />
          <!-- local relative path when responsemode is ExecuteURL -->
        <error statusCode="403" path="~/404error.aspx" responseMode="ExecuteURL" />
        <error statusCode="404" path="~/404error.aspx" responseMode="ExecuteURL" />                
        <error statusCode="500" path="~/404error.aspx" responseMode="ExecuteURL" />
      </httpErrors>
      <modules runAllManagedModulesForAllRequests="true"/>
   </system.webServer>
</configuration>

显然我必须更改404以外页面的路径,但我只是想测试它们的错误。最后web.config工作得更糟。

你能告诉我需要修改的内容吗?我会很感激一个完整的<configuration>,因为我一直很困惑。

编辑1

我读过许多开发人员建议将其设为HTML页面。现在我的页面是404.html这是我更新的web.config

<configuration>
  <system.web>
    <customErrors mode="On"
              redirectMode="ResponseRewrite">
        <error statusCode="404"
           redirect="~/404.html"/>
      </customErrors>
      <globalization
        fileEncoding="utf-8"
        requestEncoding="utf-8"
        responseEncoding="utf-8"
        culture="en-US"
        uiCulture="de-DE"
      />
  </system.web>

  <system.webServer>
    <httpErrors errorMode="Custom"
            defaultResponseMode="File">
      <remove statusCode="404"/>
      <error statusCode="404"
          path="~/404.html"/>
    </httpErrors>
  </system.webServer>
</configuration>

2 个答案:

答案 0 :(得分:8)

您需要配置<httpErrors>元素。这会为静态文件和服务器页面配置错误页面。

您的第三次尝试“web.config(3)”和“编辑1”几乎 。问题是你不能在这里使用app-relative路径(例如:“〜/ 404.html”),它们必须是站点根目录的相对路径(例如:“/404.html”)。

<?xml version="1.0"?>
<configuration>
   <system.webServer>
      <httpErrors>
        <remove statusCode="401" subStatusCode="-1" />
        <remove statusCode="403" subStatusCode="-1" />      
        <remove statusCode="404" subStatusCode="-1" />                
        <remove statusCode="500" subStatusCode="-1" />
          <!-- full url when responsemode is Redirect -->
        <error statusCode="401" path="http://foo.com/default.htm" responseMode="Redirect" />
          <!-- local relative path when responsemode is ExecuteURL -->
        <error statusCode="403" path="/404error.aspx" responseMode="ExecuteURL" />
        <error statusCode="404" path="/404error.aspx" responseMode="ExecuteURL" />                
        <error statusCode="500" path="/404error.aspx" responseMode="ExecuteURL" />
      </httpErrors>
   </system.webServer>
</configuration>

答案 1 :(得分:-1)

示例customErrors部分中的设置会导致任何未处理的HTTP 404(找不到文件)错误被定向到Http404ErrorPage.aspx文件。如果请求.aspx文件,.asmx文件等,并且所请求的文件不存在,则会发生这些HTTP 404错误。 ASP.NET文件中的所有其他未处理错误都将定向到DefaultRedirectErrorPage.aspx文件。

<configuration>
  <appSettings/>
  <connectionStrings/>
  <system.web>
    <compilation debug="true" />

    <!-- Turn on Custom Errors -->
    <customErrors mode="On" 
      defaultRedirect="DefaultRedirectErrorPage.aspx">
      <error statusCode="404" redirect="Http404ErrorPage.aspx"/>
    </customErrors>

  </system.web>
</configuration>

<强> NoteNote: 在该示例中,mode属性设置为“On”,以便在Visual Studio中运行示例时可以显示错误消息。在生产环境中,此设置通常为“RemoteOnly”。然后,ASP.NET将错误页面呈现给外部用户。如果在服务器计算机(localhost)上发出请求,ASP.NET将呈现包含详细错误信息的页面。