Правило перезаписи не пропускает $ 1 при использовании!? - PullRequest
1 голос
/ 27 июля 2010

Я использую это правило:

RewriteRule !^(.*?/.*|.*?\.(?:php|html)$)$ headers.php?a=$1 [L]

(основываясь на большом вкладе в Regex соответствует этому ИЛИ что? )

Переписывается в headers.phpкогда я набираю localhost/foo, но переменная a пуста вместо foo (я проверял с помощью var_dump($_REQUEST))

Есть идеи, почему?Я пытался использовать

RewriteCond  %{REQUEST_URI}  !headers

, но это было не так.

Спасибо!

1 Ответ

2 голосов
/ 27 июля 2010

Правило отменяется, поэтому оно выполняется тогда и только тогда, когда регулярное выражение не соответствует обрабатываемому URI. Поскольку группа захвата не соответствует localhost/foo, движку регулярных выражений нечего добавить в $1. Решение состоит в том, чтобы избежать использования отрицания в вашей директиве RewriteRule, и вместо этого использовать директивы RewriteCond для проверки отрицательного регулярного выражения. Следующий набор правил должен работать. (Я не проверял это, хотя. Возможно, где-то есть ошибка.)

RewriteCond %{REQUEST_URI} !/.*/
RewriteCond %{REQUEST_URI} !\.(html|php)$
RewriteRule (.*) headers.php?a=$1 [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...