mod_rewrite: как перенаправить все кроме 2-х файлов в /?

У меня небольшая проблема с конфигурацией mod_rewrite.

Я хочу перенаправить все в корневой каталог (http://www.mydomain.com/), кроме два файла.

Итак, я попробовал это:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !^/
RewriteCond %{REQUEST_FILENAME} !/file1.html
RewriteCond %{REQUEST_FILENAME} !/file2.html
RewriteRule ^(.*)$ http://www.mydomain.com/ [L,R=301]

Это, к сожалению, ничего не перенаправляет.

Если я пропущу первую строку RewriteCond, я получу ошибку перенаправления.

Где я ошибся здесь?


person Oliver Cyberpagan Krapp    schedule 12.06.2013    source источник


Ответы (1)


Во-первых, вы, вероятно, захотите использовать REQUEST_URI вместо REQUEST_FILENAME. Они могут быть одинаковыми в сценарии виртуального хоста, но не обычно. Вероятно, вы имеете в виду переписать URI, а не локальный путь.

Во-вторых, ваше правило;

RewriteCond %{REQUEST_FILENAME} !^/

...исключает все запросы к чему-либо, начинающемуся с /, то есть всем URI, от перезаписи. То, что вы хотите сделать, вероятно;

RewriteCond %{REQUEST_URI} !^/$

Правила для игнорируемых файлов, вероятно, должны иметь дополнительный $ в конце, чтобы быть соответствием «заканчивается на», а не соответствием «содержит».

Это оставляет что-то вроде;

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{REQUEST_URI} !/file1.html$
RewriteCond %{REQUEST_URI} !/file2.html$
RewriteRule ^(.*)$ http://www.mydomain.com/ [L,R=301]
person Joachim Isaksson    schedule 12.06.2013
comment
Я нашел это сам! Это было то же самое, что вы предложили, Иоахим, но все равно спасибо! - person Oliver Cyberpagan Krapp; 12.06.2013