Mod rewrite 重写规则顺序和标志

Mod rewrite 重写规则顺序和标志,mod-rewrite,apache2,Mod Rewrite,Apache2,我对重写规则标志有问题。我有一个“主”重写规则来处理我的应用程序,但我也有一些URL需要以不同的方式处理(将它们视为自定义路由) 我尝试了许多不同的标志,但它从来没有给我想要的结果。检查代码中的第一条注释以了解我想要的内容 # First check if this pattern is found, and if it's not, continue to the next one and disregard this one RewriteRule ^test/report/([0-9]+)

我对重写规则标志有问题。我有一个“主”重写规则来处理我的应用程序,但我也有一些URL需要以不同的方式处理(将它们视为自定义路由)

我尝试了许多不同的标志,但它从来没有给我想要的结果。检查代码中的第一条注释以了解我想要的内容

# First check if this pattern is found, and if it's not, continue to the next one and disregard this one
RewriteRule ^test/report/([0-9]+)/?$ index.php?page=report&id=$1 [PT,L]

RewriteRule ^(.*)/?$ index.php?page=$1 [PT,L]

提前谢谢

在第一条规则上使用C标志进行链接,这意味着如果第一条规则不匹配,则第二条规则将被忽略。您的评论描述了在没有C标志的情况下会发生什么。如果要避免在第一条规则匹配时应用第二条规则,我认为您可能需要使用L标志

编辑:

现在您已经将第一条规则中的C标志更改为L,还有另一个问题。您需要确保重写的路径不会被重写规则指令以某种方式重新处理,从而改变它

在这种情况下,实现该目标的一种方法是确保页面本身没有被重写为index.php:

RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^test/report/([0-9]+)/?$ index.php?page=report&id=$1 [PT,L]

RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)/?$ index.php?page=$1 [PT,L]
不幸的是,我不知道有什么方法可以使相同的重写条件适用于你的所有规则,除了在每个规则之前重复它

编辑:

现在我想起来了,是的,可能有更好的解决办法。不要使用RewriteCond指令,而是从以下内容开始:

RewriteRule ^index.php - [PT,NC,L]

现在,以index.php开头的任何内容都将匹配,不会发生任何更改,也不会遵循更多的重写规则。

True,我忘了删除C标志。删除它或将其替换为L标志将导致页面参数始终为“index.php”。非常奇怪谢谢你,这似乎有效,但应该有更好的解决办法,你不认为吗?安德鲁勋爵,你统治!谢谢大家,但是现在我只能从那个目录访问index.php,我的js、css文件的所有路径现在都被删除了broken@Jesse是的,在您当前的规则下,这些将映射到index.php。如果您为它们添加了类似于为index.php添加的“异常”,那么就应该注意了。如果您需要一个示例,请告诉我,但它基本上是另一个与js或css文件匹配的重写规则,并且(使用index.php规则中使用的-运算符)不会重写它们。