RewriteRule правила порядка и флагов - PullRequest
1 голос
/ 31 марта 2011

У меня проблема с флагами 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]

Заранее спасибо!

1 Ответ

0 голосов
/ 31 марта 2011

В качестве первого правила вы используете флаг 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.

...