Как сделать цепочку на mod_rewrite - PullRequest
1 голос
/ 11 января 2011

Мне нужно простое решение для цепочки условий, но я всегда заканчиваю ошибками:

Если это не удаленный адрес 123.123.123.123 И его http-хост ex.example.com GOTO example.example.com

Я придумал это (что не работает):

RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123$ [C]
RewriteCond %{HTTP_HOST} ^ex\.example\.com$ [NC]
RewriteRule . http://example.example.com%{REQUEST_URI} [R,L]

Я думал, что флаг [C] может справиться с этим, но это не так. Я не нашел никаких примеров по этому

1 Ответ

2 голосов
/ 11 января 2011

Если под цепочкой вы подразумеваете, что RewriteCond зависит от предыдущего, вам не нужно [C].

Они уже связаны неявным AND.Таким образом, будет достаточно следующего:

RewriteCond %{REMOTE_ADDR} !=123.123.123.123
RewriteCond %{SERVER_NAME} =ex.example.com [NC]
RewriteCond %{REQUEST_URI} (.*)
RewriteRule .* http://example.example.com%1 [R=301,L]

Обратите внимание на использование %{SERVER_NAME} вместо %{HTTP_HOST}.

Если ваш виртуальный хост по умолчанию принимает все входящие запросы, небезопасно полагаться на HTTP_HOST, поскольку его значение берется из поля заголовка HTTP Host:, которое может быть подделано!

...