Apache2: Nicht-WWW auf WWW weiterleiten?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet
<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.


David67481 
Beitragsersteller
 13.09.2023, 00:14

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.

https://www.digitalocean.com/community/questions/apache-non-www-to-www-https-secure-and-let-s-encrypt

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.

0