2012-07-27 67 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位置。這對我們的環境來說更簡潔,更簡單