我遇到了RewriteRule标志的问题。我有一个“主”RewriteRule来处理我的应用程序,但我也有一些需要以不同方式处理的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]
提前致谢!
答案 0 :(得分:0)
您在第一条规则上使用C标志进行链接,这意味着如果第一条规则不匹配,第二条规则将被忽略。您的评论描述了没有C标志会发生什么。我想你可能想要一个L标志,如果你想避免在第一个规则匹配时应用第二个规则。
修改强>
现在你已经在第一条规则上将C标志更改为L,还有另一个问题。您需要确保RewriteRule指令不会以某种方式重新处理重写的路径,从而改变它。
在这种情况下,实现该目标的一种方法是确保页面本身尚未重写为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适用于你的所有规则,而不是在每个规则之前重复它。
修改强>
现在我想到了,是的,可能有一个更好的解决方案。而不是使用RewriteCond指令,从:
开始RewriteRule ^index.php - [PT,NC,L]
现在,以index.php开头的任何东西都会匹配,没有任何变化,也不会再跟随RewriteRules。