Wir migrieren von einer Subdomain zu einer anderen. Diese bestimmte Domain hat eine Teilmenge mehrerer Websites. Ich habe die folgende Umschreibung eingerichtet, um die Umleitung global zu handhaben:
In docroot/.htaccess
("Regel Nr. 1")
RewriteEngine On
RewriteCond %{HTTP_HOST} ^virtual\.example\.com$
RewriteRule ^(.*)$ http://events.example.com/$1 [L,R=301]
Es funktioniert im Allgemeinen, mit Ausnahme einiger Websites, die ihre eigenen Umschreibregeln haben. Beispielsweise /roadshow/2015/
hat die folgende Catch-All-Regel:
In docroot/roadshow/2015/.htaccess
("Regel Nr. 2")
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule .* framework/main.php?url=%1&%{QUERY_STRING} [L]
Das Problem:Die darunter liegenden Seiten /roadshow/2015/
werden weiterhin geladen, als ob Regel Nr. 1 nicht existiert.
Was übersehe ich hier? :)
Antwort1
mod_rewrite-Direktiven in .htaccess-Dateien in Unterordnern haben Vorrang vor denen in übergeordneten Ordnern. Versuchen Sie, sie RewriteOptions Inherit
in der .htaccess-Datei jedes Unterordners zu verwenden (siehehttp://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions).
Wenn Sie Apache 2.4.8 oder höher ausführen, können Sie RewriteOptions InheritDown verwenden, um es automatisch auf alle untergeordneten .htaccess-Dateien anzuwenden, anstatt jede einzelne ändern zu müssen.