Php Apache Mod Rewrite:使用L参数重写规则。什么';怎么了?
我正在开发一个php应用程序,我对Apache和Mod Rewrite有点问题。有人知道这里出了什么事吗Php Apache Mod Rewrite:使用L参数重写规则。什么';怎么了?,php,mod-rewrite,rewrite,Php,Mod Rewrite,Rewrite,我正在开发一个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 当我放入index.php时,可能我遗漏了一些东西。。。 为什么当url与第一条规则匹配时
RewriteEngine on
RewriteBase /mysite/
RewriteRule ^css\/css\.css css/css.php [L]
RewriteRule ^js\/js\.js js/js.php [L]
RewriteRule !^img\/.* index.php
当我放入index.php时,可能我遗漏了一些东西。。。
为什么当url与第一条规则匹配时apache不停止重写过程
“最后一条规则”(最后一条规则)
在此处停止重写过程,然后重试
不要再应用任何重写规则。
这对应于最后一个Perl
命令或来自
C语言。使用此标志可防止
当前已重写的URL不在
按照以下规则进一步重写。
例如,使用它重写
根路径URL(“/”)到实际路径,
e、 例如,“/e/www/”
我已经读了3个小时的论坛和文档,我仍然有同样的问题
提前感谢。在用“^css…”开始表达式之前,您可能需要将重写基数设置为“/” 试一试 例如,如果您
^
-将锚定到字符串的开头,请以/
开头。模式与以/
开头的模式匹配
编辑
以上仅对服务器配置、虚拟主机和目录有效。如果上下文为.htaccess,则在匹配规则之前(之后加上前缀),每个目录前缀(包括第一个斜杠)都会被删除,因此这里不需要^/
。我找到了一个解决方案:
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]
及
我希望这能使任何人都感到高兴
谢谢!:) Centauro12,问题是,[L]标志实际上停止了通过以下规则的传播,但是,(如果您在.htaccess文件中)URL映射再次开始。这意味着,您的所有规则将再次被处理。有关详细信息,请参阅 因此,您需要显式禁用重写php脚本的重写:
RewriteRule ^css/css.php - [L]
RewriteRule ^js/js.php - [L]
或者更紧凑(尽管可能不是您想要的):
或者在css和js规则中的^char后面加一个/就行了。好的,我的RewriteBase是/mysite/RewriteRule^img\/.*index.php工作正常,但css和js规则不起作用。有什么想法吗?@Cheeso:只有在服务器或虚拟主机配置中使用mod_rewrite时才需要前面的
/
。这些规则是放在.htaccess中还是放在主apache配置(通常是http.conf)中?这将改变mod_rewrite的行为。@Alan,是的,但是对于花生画廊,如何改变?对不起,我忘了说我的RewriteBase是:RewriteBase/mysite/它对我不起作用。感谢Apache上的大多数示例都省略了斜杠,与^/payload
相比,我在匹配^/payload
方面从来没有遇到过问题……也就是说,在.htaccess上下文中。。。。当我写我的答案时,他没有说。谢谢,我不知道。
RewriteRule ^css\/(.*)$ css/$1 [L]
RewriteRule ^js\/(.*)$ js/$1 [L]
RewriteRule ^css/css.php - [L]
RewriteRule ^js/js.php - [L]
# don't rewrite anything that really exists
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]