Magento网站为src元素中的缺失图像返回大404页面

时间:2016-02-08 02:34:08

标签: apache .htaccess

.htaccess中,我们有:

    RewriteEngine on

############################################
## you can put here your magento root folder
## path relative to web root

        RewriteBase /


############################################
## workaround for HTTP authorization
## in CGI environment

    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

############################################
## always send 404 on missing files in these folders

    RewriteCond %{REQUEST_URI} !^/(media|skin|js)/

############################################
## never rewrite for existing files, directories and links

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

############################################
## rewrite everything else to index.php

    RewriteRule .* index.php [L]

如果我导航到我网站上不存在的图片,将此网址放入浏览器的地址栏,例如www.example.com/media/catalog/non_existent_image.jpg,那么我会得到一个很好的完整404页面作为我网站的一部分& #39;的主题。这是有道理的,因为它让用户有机会点击主页按钮,或使用网站的菜单,同时仍然被告知他们正在寻找的图像不存在。

但我发现,每次在页面上显示<img src='www.example.com/media/catalog/non_existent_image.jpg'>标记时,都会返回相同的404页面。这意味着每个丢失的图像都会导致整个Magento应用程序的新实例被激活,只是为了向浏览器发送404,它不会改善用户体验。事实上,它显着减慢了页面加载速度并增加了服务器的负载。

如何在浏览器中将简单的HTML 404发送回浏览器以查找缺少的资源,同时在用户尝试使用地址栏导航到丢失的图像时仍保持完整的用户体验?

我认为这应该可以在.htaccess解决,而不是在Magento做任何事情。我认为,在Magento中执行此操作需要在index.php文件中尽早缩短代码,以防止它执行大量无意义的工作。

1 个答案:

答案 0 :(得分:0)

您需要检查资源请求的引荐来源,以确定是否应该通过index.php路由它:

RewriteEngine On

RewriteCond %{HTTP_REFERER} ^http\:\/\/example\.com\/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?:media|skin|js)/.+ - [L]

RewriteCond %{HTTP_REFERER} !^http\:\/\/example\.com\/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?:media|skin|js)/.+ index.php [L]

我已经使用REST客户端对此进行了测试。在请求不存在的图片并将HTTP_REFERER留空时,我会收到index.php内容(在我的情况下,是一个字符串,表示&#34; Foobar&#34;)。如果我将引荐来源设置为http://example.com/test,我将获得Apache 404(&#34;未找到对象&#34;)。

我在这里包含RewriteEngine指令意味着在完成其他任何操作之前,这些指令应该是第一次检查。