为什么我的mod_rewriteredirect仅适用于请求的页面,而不是必要的CSS,JS文件?

我正在尝试设置mod_rewrite以使应用程序的URL更好一些。

我有一个skinnable系统,通过query parameter设置皮肤,所以任何下面的链接将触发一个特定的皮肤加载(并存储为cookie):

 www.mysite.com/index.html?skin=123 

我正在尝试使入口链接进入系统,所以我使用这个:

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

这似乎工作正常,所以我正在加载下列链接正确的页面:

  www.mysite.com/890/ => www.mysite.com/index.html?skin=890 

但是,只有我的初始页面被正确加载,所有CSS和JS文件仍然被请求从错误的pathwww.mysite.com/890/www.mysite.com

题:
我怎么能重写所有请求的文件(CSS,JS,IMG …)被正确redirect,不包括/890/path? 另外,有没有办法使我的重写更通用,以便我可以处理这两个

  www.mysite.com/890/ => www.mysite.com/index.html?skin=890 www.mysite.com/890/foo.html => www.mysite.com/foo.html?skin=890 www.mysite.com/890/bar.html => www.mysite.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中的下一个斜线,然后忽略斜线,第二个斜线后面的所有内容都应该存储在$ 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