Назад | Перейти на главную страницу

Исключение RewriteCond с REQUEST_URI для RewriteRule с новым доменом не работает

Следующее исключение не работает. http://www.domain.com с и без / тестовое перенаправление на http://www.example.de/foo/, но исключения не должно быть!

RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteCond %{REQUEST_URI} !^/test$
RewriteRule ^(.*)$ http://www.example.de/foo/ [R=302,L]

В чем причина?

Это противоречит правилу

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

в конце файла .htaccess.

Если я добавлю исключение для index.php, например

RewriteCond %{HTTP_HOST} ^www.domain.example$ [NC]
RewriteCond %{REQUEST_URI} !^/test$
RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ http://www.example.org/foo/ [R=302,L]

тогда это работает.

Я нашел это как решение моей проблемы, но обнаружил, что мне нужно добавить еще одно правило условной перезаписи "корневого" запроса, чтобы мое окончательное решение работало. В зависимости от требуемой логики это может выглядеть следующим образом:

RewriteCond %{HTTP_HOST} ^www.domain.example$ [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /some-uri [L,R=302]

RewriteCond %{HTTP_HOST} ^www.domain.example$ [NC]
RewriteCond %{REQUEST_URI} !^/some-uri$
RewriteRule ^(.*)$ /some-uri [L,R=302]
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /some-uri [L,R=302]