Apache virtuelle Hosts und Mod_rewrite -Konflikte
-
18-09-2019 - |
Frage
Ich habe das Netz gesucht und so und ich kann mich nicht durch dieses Problem umgehen.
Wir haben ein paar Subdomains und ein paar engagierte Server. Ein Server hat eine doppelte Taste als Ausgabeverfolgung und Zielseite. Problem ist, dass die Wildcard -Landing -Seite Sie manchmal nicht zur richtigen virtuellen Host -Seite führt. Ich habe mir Wildcards angesehen, aber sie scheinen besonders breit zu sein.
Unser Szenario ist Folgendes:
-www.askia.com ist die Hauptlande. Eine nicht existierende (Wildcard) Subdomain sollte hier immer landen.
-dev.askia.com ist die technische Support- und Ausgabe -Site. Es hat einige mod_rewrites für https. Es hat eine Weile gedauert, aber ich habe es zum Laufen gebracht und ich würde es lieber nicht brechen.
-www.askia.fr ist unsere französische Seite. Anstatt dich zu bringen www.askia.com Es führt Sie zum dev.askia.com.
-www.askia.co.uk sollte dich zu bringen www.askia.com Aber es geht zu dev.askia.com
Ich bin mir nicht ganz sicher, wo ich versuchen sollte, die Lösung zu beheben. Sollte ich etwas im CNAME tun? In der VirtualHosts -Konfigurationsdatei oder in der Datei mod_rewrite.
Lösung
Probieren Sie diese Regeln aus:
RewriteCond %{HTTP_HOST} ^dev\.
RewriteCond %{HTTP_HOST} !^dev\.askia\.com$
RewriteRule ^ http://dev.askia.com%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.askia\.com$
RewriteCond %{HTTP_HOST} !^dev\.askia\.com$
RewriteRule ^ http://www.askia.com%{REQUEST_URI} [L,R=301]
Die erste Regel leitet jede Anfrage an einen Host weiter, beginnend mit dev.
aber nicht dev.askia.com
zu www.askia.com
. Und die zweite Regel leiten Anfragen an einen anderen Host ab als www.askia.com
und dev.askia.com
zu www.askia.com
. Also sollte jede Anfrage entweder gehen dev.askia.com
oder www.askia.com
.
Andere Tipps
Wenn virtuelle Hosts in Apache verwendet werden, ist der erste aufgelistete Hosted immer die Standardeinstellung für Nichtübereinstimmungen.
#default vhost
# any non-matches will land here
<VirtualHost _default_:80>
ServerName www.askia.com:80
DocumentRoot /path/to/site
ErrorLog /path/ti/sites/logs/error_log
</VirtualHost>
# vhost #2
<VirtualHost _dev_Site_:443>
ServerName dev.askia.com:443
DocumentRoot /path/to/dev/site
ErrorLog /path/to/dev/sites/logs/error_log
#ssl details
SSLEngine on
SSLCipherSuite HIGH:MEDIUM
SSLCertificateFile /location/securti.crt
SSLCertificateKeyFile /location/securti.key
#any rewrite rules to apply only to this (default) domain
# force SSL for instance..
RewriteRule .* - [F]
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://dev.askia.com/
</VirtualHost>
#etc, etc