2012-07-27 55 views
0

我们有几种不同尺寸的产品图像。我们希望在产品图像丢失时返回正确尺寸的默认图像。当图像丢失时,Apache服务于默认图像

图像的路径对于每种产品都不相同。 path /www/docroot/images/brand/product/product1_l.jpg path /www/docroot/images/differentbrand/differentproduct/someotherproduct1_l.jpg 图像的大小看起来像左边的项目。我们希望在右侧选择相应的默认图像。

product1_l.jpg large noimage_l.jpg 
product1_m.jpg medium noimage_m.jpg 
product1_s.jpg small noimage_s.jpg 

我见过一些使用mod_rewrite实现类似功能的人的例子。任何人都可以提供任何指导我如何使用它来适应我的情况?

回答

0

您需要一个智能404处理程序。如果Apache抛出404(文件未找到)错误,智能处理程序应尝试通过查看URL的模式来挽救事件,并找到一个已知资源来代替服务。你还应该处理掉回图像可能不存在的可能性。

此页面可以告诉您如何检查文件是否存在,但逻辑将需要在最后一行。

http://www.phpriot.com/articles/search-engine-urls/5

RewriteEngine On 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 

或者你可以去的.htaccess的路线(我认为这是清洁剂)

http://httpd.apache.org/docs/2.2/mod/core.html#errordocument

假设你可以使用的.htaccess和PHP这里是一个解决方案:

将此行添加到您的.htaccess中:

ErrorDocument 404 /error.php 

然后给你error.php这样

<?php 
if(preg_match("/^/images/thumbnail/", $_SERVER['REQUEST_URI'])) { 
    //do a 302 redirect 
    header('Location: /images/defualtImage.jpg') ; 
} else { 
    //You need to go somewhere to handle actual 404 errors 
    header('Location: /static/404.html') ; 
} 
?> 

302 redirect directs将工作最好在此处添加该代码。

+0

我正在运行java。 PHP不适用于我。它看起来像我需要有条件的重写来实现不同大小的不同默认图像。那可能吗? – ddjammin 2012-07-31 00:05:30

+0

就像在Tomcat或Jetty中一样?至于不同大小的图片,只要这个名字有关于预期大小的一些线索,例如:像/thumbs/(product)-(size).jpg这样的文件路径可能会被不恰当地重写为/ thumbs/default-(size) .jpg – 2012-07-31 03:03:22

+0

Apache/Tomcat 我不擅长正则表达式,你可以引导我朝着正确的方向,或者指向一个很好的资源,我可以快速赶上。 下面是我们可能获得的三个图像请求示例。 www.imgdomain.com/images/nike/airjordan/32513_black_l.jpg改写为/images/noimg_l.jpg www.imgdomain.com/images/nike/airjordan/32513_black_m.jpg重写/images/noimg_m.jpg www.imgdomain.com/images/addidas/kobe/34923_yellow_m.jpg重写为/images/noimg_m.jpg – ddjammin 2012-07-31 04:02:14

0

感谢您的所有意见。我们最终采用了不同的解决方案。我们使用onerror js标签指向适当的noimg位置。这对我们的环境来说更简洁,更简单