Dot-Htaccess

為什麼我的 mod_rewrite 重定向只適用於請求的頁面,而不是必要的 css、js 文件?

  • September 5, 2020

我正在嘗試設置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

引用自:https://serverfault.com/questions/506631