我正在尝试进行一些设置,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