Apache Magento站点返回大404页面,查找src元素中缺少的图像

Apache Magento站点返回大404页面,查找src元素中缺少的图像,apache,.htaccess,Apache,.htaccess,在.htaccess中,我们有: RewriteEngine on ############################################ ## you can put here your magento root folder ## path relative to web root RewriteBase / ############################################ ## workaround for HTTP

.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]
如果我在我的网站上导航到一个不存在的图像,通过将这个url放入浏览器的地址栏,例如
www.example.com/media/catalog/non_-existence_-image.jpg
,我会得到一个完整的404页面作为我网站主题的一部分。这是有意义的,因为它让用户有机会单击主页按钮,或使用网站的菜单,同时仍会被告知他们正在寻找的图像不存在

但我发现,每次页面上出现
标记时,都会返回相同的404页面。这意味着每一张丢失的图像都会导致整个Magento应用程序的一个新实例启动,只是为了向浏览器发送一个404,而这对改善用户体验没有任何作用。事实上,它明显降低了页面加载速度,并增加了服务器的负载

当用户试图使用地址栏导航到丢失的图像时,如何将一个简单的HTML404发送回浏览器以查找丢失的资源,同时仍然保持完整的用户体验


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

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

重新编写引擎打开
重写cond%{HTTP\u REFERER}^HTTP\:\/\/example\.com\/
重写cond%{REQUEST_FILENAME}-F
重写规则^(?:媒体|皮肤| js)/.+-[L]
重写cond%{HTTP_REFERER}^http\:\/\/example\.com\/
重写cond%{REQUEST_FILENAME}-F
重写规则^(?:media | skin | js)/.+index.php[L]
我已经用一个REST客户机测试过了。当请求一个不存在的图像并将
HTTP\u REFERER
留空时,我收到了
index.php
内容(在我的例子中,是一个表示“Foobar”的字符串)。如果我将引用者设置为
http://example.com/test
,我收到了Apache404(“找不到对象”)


我在这里加入了
RewriteEngine
指令,这意味着在做任何其他事情之前,这些都应该是第一次进行检查。

我认为只有在
HTTP\u REFERER
设置到您的域时才会显示正常的404,但我不能完全确定。假设这是可能的,你知道如何在htaccess中实现吗?有没有办法不用硬编码推荐人就可以做到这一点?htaccess最好可移植到具有不同域名的其他服务器。我编辑了我的问题,在我的重写部分的顶部添加了广告,在那里我比以前的编辑多了一个
RewriteBase
。不过,我不在CGI环境中。您可以检查它是否为空(第一个为
!^$
,第二个为
^$
)。请注意,它是相反的。我还没测试过,但我想它会有用的。