如果用戶轉到URL,說:http://www.domain.com/image/orange.jpg 但orange.jpg
不存在,但是orange.png確實可以,.htaccess是否允許用戶找到它?在這種情況下,htaccess可以幫助我嗎?
回答
這應該是可能的。 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
,您可以檢查圖像的現有版本不匆忙,回到標題和內容的根據自己的喜好。
+1的想法。但是,也許第一條規則是在存在時更改所請求文件的擴展名,而不是在不存在的情況下使用不同的擴展名獲取另一條擴展名。不知道這是否是你的意圖。 – 2013-02-10 08:56:18
@faa對不起,我不明白你的意思。如果jpg變體不存在,第一條規則打算將'extension'從'.jpg' tp'.png'更改。這是OP所要求的。爲什麼不應該那個PNG變種呢? – arkascha 2013-02-10 10:07:49
根據規則,只有具有'jpg'擴展名的請求文件存在時,纔會傳遞'png'變體。這是一個積極的條件,規則要求「^ /無論......」,其中「無論」必須存在。也許你的意思是'!^ /無論什麼......' – 2013-02-10 10:20:57
- 1. 在這種情況下創建CTE有幫助嗎?
- 2. 這可能是appdomains在這種情況下會有所幫助嗎?
- 3. 我可以在這種情況下使用複製嗎?
- 4. 我可以在這種情況下使用觸發器嗎?
- 5. 我可以在這種情況下使用WCF嗎?
- 6. 在這種情況下,我可以忽略C4251警告嗎?
- 7. 我可以在這種情況下使用全局變量嗎?
- 8. 在這種情況下,我可以違反LSP(Liskov替換)嗎?
- 9. 在這種情況下,我可以使用eval函數嗎?
- 10. htaccess的 - 在這種情況下
- 11. 可以循環展開還是duff幫助這種情況?
- 12. 在這種情況下需要幫助搭建腳手架
- 13. 在這種情況下需要幫助,什麼是標準?
- 14. 在這種情況下,Amazon S3是否有所幫助?
- 15. 在這種情況下會創建索引幫助
- 16. Thread.Sleep(Timespan.Zero)可以在這種情況下使用嗎?
- 17. 在這種情況下可以使用javascript而不是java嗎?
- 18. 在這種情況下使用STI可以嗎?
- 19. 在這種情況下可以使用Workflow Foundation嗎?
- 20. @屬性,在這種情況下可以嗎?
- 21. 在這種情況下可以從庫擴展功能嗎?
- 22. 在這種情況下可以使用繼承嗎? (Java)
- 23. 在這種情況下,我需要不可變的Map嗎?
- 24. 在這種情況下,我需要擔心許可證嗎?
- 25. 我可以在沒有視圖幫助的情況下製作SingleActiveRegion嗎?
- 26. 我們可以在這種情況下使用'var'
- 27. 如何在這種情況下指出我的正確地址?需要幫助
- 28. 是在這種情況下
- 29. 在這種情況下
- 30. 哪種PNG Fix可以在這種情況下工作?
NO; htaccess沒有使用列表swith可能的結果爲每個請求;你爲什麼會迴應一個無效的網址,仍然想找到正確的網址? – 2013-02-10 08:05:10
也許啓用[Multiviews](http://httpd.apache.org/docs/2.2/mod/mod_negotiation.html#multiviews)即可解決該問題。 – 2013-02-10 08:10:05