asp.net - 在IIS7 404重定向页面中访问原始URL

标签 asp.net url iis-7 redirect http-status-code-404

在IIS 7上设置的站点上,我有一个.aspx页面作为自定义404页面。我需要检索用户试图访问的原始URL,以便在404页面上进行一些处理。诀窍在于,我需要专门处理不包含.aspx扩展名(例如http://example.com/testurl)的404,该扩展名不会通过ASP.NET的自定义错误部分进行路由。我可以将IIS配置为指向我的自定义404,但是那时我不知道如何获取原始URL?有人知道这是否可能吗?

谢谢,

麦克风

最佳答案

是的,可以获取导致404错误的URL,您只需要确保已正确配置IIS即可。

您需要处理两种情况,一种情况是错误来自.aspx或.NET处理的其他页面,另一种情况是错误来自错误的文件夹(如您的问题,http://example.com/testurl )或未由.NET处理的文件名(例如* .htm)。在IIS 7中,您需要为Web应用程序的“ ASP.NET”部分的“ .NET错误页面”下以及“ IIS”部分的“错误页面”下配置自定义404错误。 web.config更改最终看起来像这样:

<system.web>
    <!-- other system.web stuff -->
    <customErrors defaultRedirect="/Error404.aspx" mode="On" redirectMode="ResponseRewrite">
        <error redirect="/Error404.aspx" statusCode="404" />
    </customErrors>
</system.web>
<system.webServer>
    <!-- other system.webServer stuff -->
    <httpErrors errorMode="Custom">
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/Error404.aspx" responseMode="ExecuteURL" />
    </httpErrors>
</system.webServer>


注意:如果您希望404页面实际返回404消息并且我认为不能通过IIS设置,则上面列出的redirectMode =“ ResponseRewrite”非常重要。

在我的示例中,我创建了一个名为Error404.aspx的页面来处理所有404错误。当.NET页(.aspx等)引发404异常时,可以在aspxerrorpath querystring变量中找到原始文件名。当常规htm或其他页面导致404错误时,可以从Request.RawUrl属性读取原始路径。我在Error404.aspx页面中使用以下代码来处理两种情况:

public partial class Error404 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        OriginalUrl = Request.QueryString["aspxerrorpath"] ?? Request.RawUrl;
        Server.ClearError();
        Response.Status = "404 not found";
        Response.StatusCode = 404;
    }

    public string OriginalUrl { get; private set; }
}


默认情况下,“ 404错误”页面不会返回404状态代码,因此您需要手动进行设置。有关更多详细信息,请参见this post

关于asp.net - 在IIS7 404重定向页面中访问原始URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5070695/

相关文章:

c# - 在 ASP.NET 中管理许多第 3 方 API key 变体

asp.net - 为现有 Azure 应用服务创建新的 ASP.NET 5 项目

c# - 将图像从数据库绑定(bind)到 GridView 而不使用处理程序或 httphandler

iis-7 - 带 SSL 的 IIS 7 反向代理?

c# - 任何具有良好单元测试(CodePlex 或任何地方)的 ASP.NET (WebForm) 应用程序?

url - 如何在 Mathematica 中对字符串进行 URL 转义?

javascript - 是否可以为特定 URL 启用 javascript?

php - 打开一个国外的网址,然后继续我自己的网页

iis - 如何在 IIS 7 中使用 appcmd 更改 allowDefinition 部分属性?

iis - IIS 6.0/Windows 2003 和 IIS 7.0/Windows 2008 之间的差异