我正在开发一个php应用程序,我对Apache和Mod Rewrite有一点问题.谁知道这里有什么问题?:
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匹配时不会停止重写过程?
'last | L'(最后一条规则)
停止重写过程,不再应用任何重写规则.这对应于Perl last命令或C语言的break命令.使用此标志可防止按照以下规则进一步重写当前重写的URL.例如,使用它将根路径URL('/')重写为真实的URL,例如'/ e/www /'.
我从3个小时开始重写论坛和文档,我仍然遇到同样的问题.
提前致谢.
Centauro12,问题是,[L]标志实际上通过以下规则停止传播,但随后(如果你在.htaccess文件中)URL映射重新开始.这意味着,您的所有规则将再次处理.有关详细信息,请参阅Apache Rewrite Guide.
因此,您需要显式禁用重写的PHP脚本的重写:
RewriteRule ^css/css.php - [L] RewriteRule ^js/js.php - [L]
或更紧凑(虽然可能不是你想要的):
# don't rewrite anything that really exists RewriteCond %{REQUEST_FILENAME} -f RewriteRule .* - [L]