我希望Web服务器根目录中的.htaccess文件将以^assets/(.*)$
开头的任何请求重定向到文件夹public/$1
。所有其他请求都必须转到index.php?request=$1
。在这种情况下,我还想保留get参数(使用L标志)。
RewriteEngine on
RewriteBase /
RewriteRule ^assets/(.*)$ public/$1 [QSA,L]
RewriteRule ^(?!assets)(.*)$ index.php?request=$1 [L,QSA]
唯一的问题是最后一行覆盖了前面的:/
我也用(.*)
进行了测试,但没有成功。
感谢您的帮助。
答案 0 :(得分:0)
尝试一下:
RewriteEngine on
RewriteRule "^/assets/(.*)$" "/public/$1" [L,QSA]
RewriteCond %{REQUEST_URI} "!^/assets/"
RewriteCond %{REQUEST_URI} "!^/index.php"
RewriteCond %{REQUEST_URI} "!^/public"
RewriteRule (.*) "/index.php?request=$1" [L,QSA]
QSA
:将参数附加到重写的部分L
:最后。这意味着,如果匹配,则不进行任何其他重写。/
开始参考文献:
https://httpd.apache.org/docs/2.4/rewrite/flags.html
https://httpd.apache.org/docs/current/mod/mod_rewrite.html
第一个规则是:
/
之后的任何内容都将被重写为“ / public / $ 1”。RewriteCond和RewriteRule说:
http://www.example.com/directory/somepage.html
将转到http://www.example.com/index.php?request=/directory/somepage.html
。http://www.example.com/directory/somepage.html?a=1&b=4
将转到http://www.example.com/index.php?request=/directory/somepage.html?a=1&b=4
编辑1115年11月19日
添加了第二个RewriteCond以确保“ /index.php”不会被重写为自身。第三,如果您希望“ / public”也不要重定向到“ /index.php”。