Php Apache Mod Rewrite:使用L参数重写规则。什么';怎么了?

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与第一条规则匹配时

我正在开发一个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与第一条规则匹配时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]