404仅重定向页面而不是图像

时间:2013-03-24 13:55:05

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

我正在使用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页面?

2 个答案:

答案 0 :(得分:4)

您可以停用runAllManagedModulesForAllRequests

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

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

答案 1 :(得分:4)

我知道这是一个为期一年的问题,但我遇到了同样的问题,我能够根据我在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>