與此問題類似,當我將 jpg/png 作為 webp 服務所需的內容放入.htaccess檔案中時,它不會加載!我有image.jpg,image.jpg.webp和image.webp. 它與第二個一起作業,但我想要的是第三個。所以我洗掉了第二個,但現在它沒有加載 webp 檔案。每次我檢查時,我都會清除快取,所以這不是問題。我的瀏覽器也支持 WebP。我不知道為什么當我右鍵單擊保存影像時,當第二個檔案存在時它顯示 webp,但是當我洗掉第二個以使用第三個時,它顯示 jpg 要保存!
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{REQUEST_FILENAME}.webp -f
RewriteRule (. )\.(jpg|jpeg|jpe|png)$ $1.webp [T=image/webp,NC]
</IfModule>
我認為可能(. )\.(jpg|jpeg|jpe|png)$是錯誤的正則運算式,但在我測驗時這是正確的,結果是:
0 => "example.com/image.jpg"
1 => "example.com/image"
2 => "jpg"
我怎樣才能解決這個問題?
uj5u.com熱心網友回復:
RewriteCond %{REQUEST_FILENAME}.webp -f RewriteRule (. )\.(jpg|jpeg|jpe|png)$ $1.webp [T=image/webp,NC]
問題是您總是image.jpg.webp在前面的條件中檢查是否存在,但image.webp在替換中重寫為。
您需要檢查是否存在image.webp(您正在重寫的同一檔案)。
但是,這確實取決于.htaccess檔案所在的位置(除非我們添加另一個條件來提取 URL/檔案路徑*1的必要部分)。
例如,如果.htaccess檔案位于/wordpress子目錄內,則:
:
RewriteCond %{DOCUMENT_ROOT}/wordpress/$1.webp -f
RewriteRule (. )\.(jpg|jpeg|jpe|png)$ $1.webp [T=image/webp,NC,L]
但是,如果.htaccess檔案位于檔案根目錄中/wordpress,則從上述條件中的TestString中洗掉。
您應該在指令中包含L標志。RewriteRule
此規則應位于.htaccess檔案頂部,在WordPress 代碼塊之前(即在注釋標記之前)。# BEGIN WordPress雖然如果image.jpg檔案始終存在,那么它應該沒關系。
*1通用版
.htaccess無論檔案位于何處,該規則都可以更改為有效(盡管RewriteBase需要相應地調整該指令或完全洗掉該指令)。但是,我們需要一個附加條件來提取檔案路徑的必要部分。例如:
:
RewriteCond %{REQUEST_FILENAME} (. )\.(jpg|jpeg|jpe|png)$ [NC]
RewriteCond %1.webp -f
RewriteRule (. )\.(jpg|jpeg|jpe|png)$ $1.webp [T=image/webp,NC,L]
%1反向參考(相對于)$1包含前面的CondPattern中第一個捕獲組的值。因此,在上面,它包含請求的 URL 映射到的絕對檔案路徑,減去.jpg后綴。
更新:兩個影像/規則......
...如何包括他們兩個?我的意思是首先檢查是否
image.webp存在回傳這個!如果沒有,檢查是否image.jpg.webp存在回傳。否則image.jpg
你基本上只需要兩個規則。首先使用最高優先級的影像規則(即。image.webp)。
例如:
RewriteEngine On
RewriteBase /wordpress/
# 1. Rewrite to "image.webp" if it exists
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/wordpress/$1.webp -f
RewriteRule (. )\.(jpg|jpeg|jpe|png)$ $1.webp [T=image/webp,NC,L]
# 2. Rewrite to "image.jpg.webp" if it exists
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.webp -f
RewriteRule \.(jpg|jpeg|jpe|png)$ %{REQUEST_URI}.webp [T=image/webp,NC,L]
我更改了您的原始規則(#2),REQUEST_FILENAME因為這不一定可靠(例如,如果.jpg請求了一個不存在的目錄中不存在的檔案,但相應的檔案.webp存在于父目錄中,那么它將導致錯誤的重寫 - 邊緣情況)。
規則 #2 也不依賴于檔案RewriteBase的位置,并且無論.htaccess檔案的位置如何都可以使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/487731.html
