2013-02-10 120 views
2

如果用戶轉到URL,說:http://www.domain.com/image/orange.jpgorange.jpg不存在,但是orange.png確實可以,.htaccess是否允許用戶找到它?在這種情況下,htaccess可以幫助我嗎?

+1

NO; htaccess沒有使用列表swith可能的結果爲每個請求;你爲什麼會迴應一個無效的網址,仍然想找到正確的網址? – 2013-02-10 08:05:10

+0

也許啓用[Multiviews](http://httpd.apache.org/docs/2.2/mod/mod_negotiation.html#multiviews)即可解決該問題。 – 2013-02-10 08:10:05

回答

1

這應該是可能的。 mod_rewrite允許檢查文件的存在。並且它允許多次重寫,以防止您不使用[L]標誌主動停止該進程。 。

所以有這樣的事情作爲出發點(未經測試)一試:

RewriteEngine on 

RewriteCond %{REQUEST_URI} ^/image/([^/.]).jpg$ 
RewriteCond %{REQUEST_URI} !-f 
RewriteRule ^/image/([^/.]).jpg /image/$1.png 

RewriteCond %{REQUEST_URI} ^/image/([^/.]).png$ 
RewriteCond %{REQUEST_URI} !-f 
RewriteRule - /image/no-found [G,L] 

上述適用如果中央服務器配置(每個主機配置)中定義。對於.htaccess樣式文件,其語法略有不同:RewriteRule中的前導斜槓(/)在該情況下不得存在。如果您有選擇,請在服務器配置中進行重寫。 .htaccess樣式文件就像解決方法,非常容易出錯。如果可能,儘量避免它們。

但請注意,這樣的設置有點有限,並且很難維持。通常,這是一個更好的選擇,可以設置一個小的包裝腳本(可能是基於php)來處理請求,並在決定發送什麼響應之前檢查多個備選方案。你可以重寫請求是這樣的:

RewriteEngine on 
RewriteRule ^/image/([^/.])\..+$ /image.php?name=%1 

現在,您可以服務於該請求與腳本image.php,您可以檢查圖像的現有版本不匆忙,回到標題和內容的根據自己的喜好。

+0

+1的想法。但是,也許第一條規則是在存在時更改所請求文件的擴展名,而不是在不存在的情況下使用不同的擴展名獲取另一條擴展名。不知道這是否是你的意圖。 – 2013-02-10 08:56:18

+0

@faa對不起,我不明白你的意思。如果jpg變體不存在,第一條規則打算將'extension'從'.jpg' tp'.png'更改。這是OP所要求的。爲什麼不應該那個PNG變種呢? – arkascha 2013-02-10 10:07:49

+0

根據規則,只有具有'jpg'擴展名的請求文件存在時,纔會傳遞'png'變體。這是一個積極的條件,規則要求「^ /無論......」,其中「無論」必須存在。也許你的意思是'!^ /無論什麼......' – 2013-02-10 10:20:57

相關問題