我正在开发一个php应用程序,我在Apache和Mod重写方面有个小问题。有人知道这是怎么回事吗?
RewriteEngine on
RewriteBase /mysite/
RewriteRule ^css\/css\.css css/css.php [L]
RewriteRule ^js\/js\.js js/js.php [L]
RewriteRule !^img\/.* index.php当我把http://localhost/css/css.css出现在index.php上时,也许我遗漏了什么.为什么当url与第一条规则匹配时,apache不停止重写过程?
最后一条(最后一条规则) 在这里停止重写过程,不要再应用任何重写规则。这对应于C语言中的Perl最后一个命令或break命令。使用此标志可通过以下规则防止当前重写的URL被进一步重写。例如,使用它将根路径URL ('/')重写为真正的URL,例如'/e/www/‘。
我已经阅读论坛和文档从3个小时以来,我仍然有同样的问题。
提前谢谢。
发布于 2009-11-23 16:48:51
我找到了一个解决办法:
RewriteEngine on
RewriteBase /mysite/
RewriteRule ^css\/css\.css css/css.php [L]
RewriteRule ^css\/(.*)$ css/$1 [L]
RewriteRule ^js\/js\.js js/js.php [L]
RewriteRule ^js\/(.*)$ js/$1 [L]
RewriteRule ^img/(.*)$ img/$1 [L]
RewriteRule ^(.*)$ index.php?rewrite=$1 很好,但我不知道为什么有必要
RewriteRule ^css\/(.*)$ css/$1 [L]和
RewriteRule ^js\/(.*)$ js/$1 [L]我希望这对任何人都有好处。
谢谢!:)
发布于 2009-11-23 16:56:28
Centauro12的问题是,L标志实际上停止了通过以下规则的传播,但是接着是(如果您在.htaccess文件中),URL映射再次开始。这意味着,all您的规则将被第二次处理。有关细节,请参见Apache重写指南。
因此,您需要显式地禁用重写的php脚本:
RewriteRule ^css/css.php - [L]
RewriteRule ^js/js.php - [L]或者更紧凑(尽管可能不是您想要的):
# don't rewrite anything that really exists
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]https://stackoverflow.com/questions/1775877
复制相似问题