Мы переходим с одного поддомена на другой. Этот конкретный домен состоит из нескольких веб-сайтов. Я настроил следующую перезапись для глобальной обработки перенаправления:
В docroot/.htaccess
(«Правило №1»)
RewriteEngine On
RewriteCond %{HTTP_HOST} ^virtual\.example\.com$
RewriteRule ^(.*)$ http://events.example.com/$1 [L,R=301]
Обычно это работает, за исключением нескольких сайтов, на которых действуют собственные правила перезаписи. Например, /roadshow/2015/
имеет следующее универсальное правило:
В docroot/roadshow/2015/.htaccess
(«Правило №2»)
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule .* framework/main.php?url=%1&%{QUERY_STRING} [L]
Эта проблема: Страницы под /roadshow/2015/
продолжить загрузку, как будто правила №1 не существует.
Что мне здесь не хватает? :)
Директивы mod_rewrite в файлах .htaccess во вложенных папках будут иметь приоритет над директивами в родительских папках - попробуйте использовать RewriteOptions Inherit
в файле .htaccess каждой подпапки (см. http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions).
Если вы используете Apache 2.4.8 или выше, вы можете использовать RewriteOptions InheritDown для автоматического применения ко всем дочерним файлам .htaccess вместо того, чтобы изменять каждый из них.