2016-02-29 4 views
1

На моем веб-сервере я хотел бы перенаправить все посещения определенного файла за два исключения. Если URI равен mydomain.com/Folder1 или mydomain/Folder2 (и что-нибудь позади этого), они должны работать нормально. Я пробовал с:htaccess RewriteCond не работает

RewriteCond %{REQUEST_URI} !=www.mydomain.com/Folder1.* | www.mydomain.com/Folder2.* 
RewriteRule ^.*$ www.mydomain.com/error.php [R=301,L] 


RewriteCond %{DOCUMENT_ROOT}/$1 -d 
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,NE] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)/?$ /index.php?path=$1 [NC,L,QSA] 

Но это правило не работает. Может кто-нибудь, пожалуйста, взгляните на него?

ответ

2

Вы не можете сопоставить доменное имя с использованием переменной REQUEST_URI. Вы можете использовать это правило вместо:

RewriteCond %{THE_REQUEST} !\s/+(error\.php|Folder1|Folder2) [NC] 
RewriteRule^/error.php [R=301,L] 

RewriteCond %{DOCUMENT_ROOT}/$1 -d 
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,NE] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)/?$ /index.php?path=$1 [L,QSA] 

Обязательно очистите кеш браузера перед его проверкой.

+0

Хорошо, спасибо за это. Это отлично работает, но у меня есть еще два RewriteRules в моем файле htaccess, которые применяются после этого условия (я добавил их к вопросу). Можно ли пренебречь ими, если применяется первое правило или мне нужно переписать их? – Cilenco

+1

Это замечательно! Спасибо за это! Не могли бы вы также объяснить, что делает '\ s/+'? – Cilenco

+1

Поскольку я использую переменную 'THE_REQUEST' здесь, а пример значения этой переменной -' GET /index.php?id=123 HTTP/1.1' здесь '\ s/+' соответствует пробелу после 'GET', а затем 1 или более пробелы в начале URI – anubhava