为什么我的 mod_rewrite 重定向仅对请求的页面起作用,而对必要的 css、js 文件不起作用?

为什么我的 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

谢谢您的启发!

答案1

因为您已将其设置为仅重写以斜杠结尾的 URI。如果您希望它还使用斜杠后面的任何内容,则需要更多。试试这个:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/(.*)/$ /index.html?app=$1 [L]
    RewriteRule ^/(.*)/(.+)$ /$1?app=$2 [L]
</IfModule>

第二条规则是“如果包含斜线,则将到下一个斜线为止的所有内容存储在 $1 中。然后忽略斜线。第二个斜线后面的所有内容都应存储在 $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

相关内容