<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^css/(.*)$ default/public/css/$1 [L]
RewriteRule ^js/(.*)$ default/public/js/$1 [L]
RewriteRule ^(.*)$ default/public/index.php?uri=$1 [L]
</IfModule>
这是我的.htaccess。 每当尝试访问http://domain.com/css/css.css时,我只获取default / public / index.php的内容。 如果我注释掉重定向到default / public / index.php?uri = $ 1的行,我得到default / public / css / css.css的内容,所以规则匹配,但[L]显然不是工作,因为它不会终止处理规则。
有人有同样的问题吗? 是一些服务器配置错误?关于如何解决这个问题的任何想法?
感谢任何建议!
答案 0 :(得分:3)
但[L]显然无效
不,这不是正确的,L
标志确实有效。 L
处理不存在mod_rewrite
标志的目的。 mod_rewrite
规则在循环中运行,而L
在编程方面与continue
相同。
要解决此问题,您可以执行以下操作:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} .
RewriteRule ^ - [L]
RewriteRule ^css/(.*)$ default/public/css/$1 [L]
RewriteRule ^js/(.*)$ default/public/js/$1 [L]
RewriteRule ^(.*)$ default/public/index.php?uri=$1 [L]
</IfModule>
这里%{ENV:REDIRECT_STATUS}
是Apache首次重写后设置的内部变量。
答案 1 :(得分:0)
我找到了我正在寻找的答案,显然Apache也通过这些规则传递了重写的URL,所以我不得不再添加两行,这样就解决了问题:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^css/(.*)$ default/public/css/$1 [L]
RewriteRule ^default/public/css/(.*)$ default/public/css/$1 [L]
RewriteRule ^js/(.*)$ default/public/js/$1 [L]
RewriteRule ^default/public/js/(.*)$ default/public/js/$1 [L]
RewriteRule ^(.*)$ default/public/index.php?uri=$1 [L]
</IfModule>