Правило отменяется, поэтому оно выполняется тогда и только тогда, когда регулярное выражение не соответствует обрабатываемому URI. Поскольку группа захвата не соответствует localhost/foo
, движку регулярных выражений нечего добавить в $1
. Решение состоит в том, чтобы избежать использования отрицания в вашей директиве RewriteRule
, и вместо этого использовать директивы RewriteCond
для проверки отрицательного регулярного выражения. Следующий набор правил должен работать. (Я не проверял это, хотя. Возможно, где-то есть ошибка.)
RewriteCond %{REQUEST_URI} !/.*/
RewriteCond %{REQUEST_URI} !\.(html|php)$
RewriteRule (.*) headers.php?a=$1 [L]