【问题标题】:404 redirect for pages only not images404 重定向仅用于页面而不是图像
【发布时间】:2013-03-14 00:28:19
【问题描述】:

我正在使用一个 asp.net mvc 应用程序。我在 web.config 中有以下条目来处理 404

    <httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="/Error/Error404" responseMode="ExecuteURL" />
</httpErrors>

这适用于请求页面时,它会重定向到我的 404 视图。但是,对于丢失的图像,它也会重定向到 404 页面,即。图片的响应是 404 页面。

由于这是一个性能问题,我有什么办法可以更改上述内容,以便只有“页面”中的 404 而不是图像等资源触发重定向到 404 页面?

【问题讨论】:

  • 您的问题不清楚。 “页”是什么意思?您希望它处理哪些 URL?

标签: asp.net asp.net-mvc asp.net-mvc-4 http-status-code-404


【解决方案1】:

我知道这是一个老问题,但是我刚刚遇到了同样的问题,并且我能够根据我在 htaccess 中使用的内容提出一个解决方案。

以下解决方案主要检查文件是否具有图像扩展名,它不是文件也不是目录。之后,它会提供一个图像文件,我用它来识别丢失的图像。

<rule name="404 Images" stopProcessing="true">
    <match url=".*" ignoreCase="true" />
    <conditions>
        <add input="{URL}" pattern="^.+\.(jpg|jpeg|png|gif|ico)$" ignoreCase="true" negate="false" />
        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="true" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="true" negate="true" />
    </conditions>
    <action type="Rewrite" url="/design/images/404.png" />
</rule>

【讨论】:

    【解决方案2】:

    你可以禁用runAllManagedModulesForAllRequests:

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

    当然,现在您会看到 IIS 默认 404 页面显示损坏的图像,因为静态资源将直接由静态处理程序提供服务,而不是通过托管管道。

    【讨论】:

    • 感谢您的支持 - 我可以通过任何方式将其仅用于图像等。或者以其他方式解决此问题。对于我网站中的其他功能,我需要打开它。
    • 只有在 IIS 中没有像 images 这样的概念。有静态资源和托管资源。您可以编写一个通用的处理程序或控制器来为您的图像提供服务并拥有更多控制权,但这是您真正需要的吗?
    猜你喜欢
    • 2010-12-06
    • 2022-01-14
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多