Dot-Htaccess
為什麼我的 mod_rewrite 重定向只適用於請求的頁面,而不是必要的 css、js 文件?
我正在嘗試設置
mod_rewrite
使應用程序的 URL 更好一點的第一步。我有一個可換膚系統,通過查詢參數設置皮膚,因此以下任何連結都會觸發載入特定皮膚(並儲存為 cookie):
www.example.com/index.html?skin=123
我正在嘗試在系統中製作漂亮的入口連結,所以我正在使用這個:
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^/(.*)/$ /index.html?app=%1 [L] </IfModule>
這似乎工作正常,所以我在以下連結上傳入了正確的頁面:
www.example.com/890/ => www.example.com/index.html?skin=890
但是,只有我的初始頁面正確載入,所有 CSS 和 JS 文件仍然從錯誤的路徑請求
www.example.com/890/
。www.example.com
問題:
如何重寫所有請求的文件(CSS、js、img…)以正確重定向(不包括
/890/
路徑)?另外,有沒有辦法讓我的重寫更通用,這樣我就可以同時處理www.example.com/890/ => www.example.com/index.html?skin=890 www.example.com/890/foo.html => www.example.com/foo.html?skin=890 www.example.com/890/bar.html => www.example.com/bar.html?skin=890
感謝您提供一些啟示!
因為您已將其設置為僅重寫以斜杠結尾的 URI。如果您希望它也使用斜線後面的任何內容,則需要更多。試試這個:
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^/(.*)/$ /index.html?app=$1 [L] RewriteRule ^/(.*)/(.+)$ /$1?app=$2 [L] </IfModule>
第二條規則說“如果它包含一個斜線,則將所有內容儲存到下一個斜線 $ 1. Then ignore the slash. Everything that follows the second slash should be stored in $ 2."
www.mysite.com/foo/
將被第一個重寫規則擷取並重寫為www.mysite.com/index.html?skin=foo
www.mysite.com/foo/whatever.html
將被第二個重寫規則擷取並重寫為www.mysite.com/whatever.html?skin=foo