我必須使用 .htaccess 將域重定向到子檔案夾。我已經這樣做了
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.de$ [NC]
RewriteRule !^domain\.de/ /domain.de%{REQUEST_URI} [L,NC]
這適用于我網站的 90%。
但我也有檔案參考,如:
domain.de/templates/shaper_helix3/fonts/fontawesome-webfont.woff2?v=4.3.0.html
該檔案存在于檔案系統中,檔案名:(
fontawesome-webfont.woff2?v=4.3.0.html包括查詢字串)
當前未找到這些檔案 (404)。如果我從檔案名中手動洗掉查詢字串(例如導致fontawesome-webfont.woff2),我會得到一個 HTTP 代碼 200(找到)。
我有多個具有上述檔案名結構的檔案,不能“硬編碼”它們,因為通過 CMS 更新和安裝附加模塊,我不知道將來哪些檔案將存在于各自的目錄中。
檔案名中包含查詢字串/版本的原因是快取破壞。
我如何修改我的規則,以便也可以找到這些檔案?
uj5u.com熱心網友回復:
使用您顯示的示例/嘗試,請嘗試遵循 htaccess 規則。這些規則適用于內部重寫規則。
在測驗您的 URL 之前,請確保清除瀏覽器快取。
RewriteEngine ON
RewriteRule ^(templates/shaper_helix3/fonts/fontawesome-webfont\.woff2)?(v=4\.3\.0\.html)/?$ $1?$2 [QSA,NC,L]
或者,如果它可以是任何檔案,請templates/shaper_helix3/fonts/fontawesomefont/嘗試以下操作:
RewriteEngine ON
RewriteRule ^(templates/shaper_helix3/fonts/[^%]*)?(v=4\.3\.0\.html)/?$ $1?$2 [QSA,NC,L]
uj5u.com熱心網友回復:
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.de$ [NC] RewriteRule !^domain\.de/ /domain.de%{REQUEST_URI} [L,NC]
這里的“問題”是REQUEST_URI服務器變數已經被 % 解碼,因此最終重寫了對/fontawesome-webfont.woff2?v=4.3.0.htmlto的請求/domain.de/fontawesome-webfont.woff2?Fv=4.3.0.html(即fontawesome-webfont.woff2查詢字串為 的v=4.3.0.html檔案,而不是名為 的文字檔案fontawesome-webfont.woff2?v=4.3.0.html)。您需要通過重寫來維護 %-encoding 所以?被重寫為?,即。/domain.de/fontawesome-webfont.woff2?v=4.3.0.html(稍后在請求最終映射到檔案系統時解碼),而不是?(分隔實際查詢字串)。
您可以通過使用反向參考(也是 %-decoded)捕獲 URL 路徑來做到這一點,但B在重寫請求之前使用重新編碼反向參考的標志。
例如:
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.de$ [NC]
RewriteCond %{REQUEST_URI} !^/domain\.de/ [NC]
RewriteRule (.*) domain.de/$1 [B,L]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/397978.html
