Apache2: Nicht-WWW auf WWW weiterleiten?
Hallo,
ich versuche auf meiner Webseite Nicht-WWW auf WWW weiterzuleiten, gleichzeitig, aber die Funktionalität beizubehalten, dass man von HTTP auf HTTPS weitergeleitet wird. Das heißt man soll am Ende immer bei https://www.meinedomain.de landen.
Das Problem ist, die WWW-Weiterleitung funktioniert einfach nicht. Kann mir vielleicht jemand eine neue Konfiguration schreiben, oder meine korrigieren?
Das hier ist meine 000-default.conf:
<VirtualHost *:80>
# HTTPS erzwingen (Weiterleitung)
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</VirtualHost>
<VirtualHost *:443>
# www-Subdomain erzwingen (Weiterleitung)
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s on(s)|offs()
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]
ServerAdmin webmaster@meinedomain.de
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
1 Antwort
![](https://images.gutefrage.net/media/user/tide1109/1568022372988_nmmslarge__1179_667_2597_2597_5d90cc1a685fa94406cd63e940354bf2.jpg?v=1568022373000)
<VirtualHost *:80>
ServerName default
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
Include /etc/apache2/includes/logs.conf
</VirtualHost>
Ich nutze diese Konfiguration für die Weiterleitung von HTTP zu HTTPS. Egal welche (Sub-)Domain genutzt wird, es wird alles auf HTTPS umgeleitet.
Meine Log Konfiguration habe ich in einer externen Datei umgesetzt, welche per Include geladen wird. Die Zeile kann entfernt werden oder die Log Config direkt eingefügt werden.
Es gibt vermutlich mehrere Möglichkeiten für diese Aufgabe. Deine Lösung funktioniert laut deiner Aussage auch.
Eine Weiterleitung von einer (Sub-)Domain zur anderen (Sub-)Domain habe ich nicht in Nutzung. Du könntest folgenden Ansatz nutzen. Du ädst zuerst deine DocumentRoot Config oder noch weitere Configs für Webseiten. Dann werden alle übrigen Abfragen mit einem Redirect verarbeitet. Die Anfrägen können von jeglicher (Sub-)domain oder IP Adresse kommen.
Du legst einen VirtualHost mit Port 443 für deine explizite Domain an. Hier wird z.B. dein DocumentRoot konfiguriert. "ServerName www.meinedomain.de" ist sehr wichtig.
Dann könntest du einen weiteren VirtualHost erstellen, der den gesamten Traffic an www.meinedomain.de schickt. Lasse hier "ServerName xxx" weg.
Diese Config müste funktionieren:
<VirtualHost *:443>
ServerName default
RedirectMatch permanent ^/(.*)$ https://www.meinedomain.de/$1
</VirtualHost>
Ein möglicher Pfad, der bereits existiert, wird damit übernommen.
Die Config muss dafür als erste Config unter Port 443 geladen werden, damit bei keiner Übereinstimmung diese verwendet wird. Falls alles in eine Datei kommt, muss es davor angegeben werden. Falls du mehrere Dateien nutzt, muss diese Datei als ersten nach alphabetischer Sortierung kommen.
Die gesamte Config in einer Datei könnte so aussehen:
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
Include /etc/apache2/includes/logs.conf
</VirtualHost>
<VirtualHost *:443>
RedirectMatch permanent ^/(.*)$ https://www.meinedomain.de/$1
# SSL Config
</VirtualHost>
<VirtualHost *:443>
ServerName www.meinedomain.de # wichtig
ServerAdmin webmaster@meinedomain.de
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# SSL Config
</VirtualHost>
Wenn die Weiterleitung wirklich nur von meinedomain.de stattfinden soll. Kannst du diesen VirtualHost Block mit "ServerName meinedomain.de" nur auf diese Domain blockieren. Falls jemand mit einer Domain/IP ankommt, die nicht zugeordnet werden kann, wird der erste VirtualHost Block unter Port 443 benuzt.
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Vielen vielen Dank, für diese ausführliche Antwort. Ich habe es tatsächlich genau im gleichen Moment mit einer fast gleichen Konfiguration aus dem Internet selbst hinbekommen.
Mit anderen Worten: Ich habe mir die "normal config file" kopiert und in die 000-default.conf eingefügt und aus der Antwort die Lets Encrypt Config File in die 000-default-le-ssl.conf eingefügt und bei beiden Dateien jeweils die Domain ausgetauscht.