
Ich habe SO-Themen zu diesem Thema gelesen. Sie gelten jedoch nur für einzelne Hosts.
Ich möchte eine einheitliche Regel für alle Server für aktuelle und zukünftige Domänen haben.
Grundsätzlich möchte ich „www“ aus allen Anfragen entfernen und nur den Domänennamen zugänglich lassen.
Apache unterstützt auch HTTPS. Wie lässt sich dies also auf alle anwenden?
Danke!
http://www.example.com >> http://example.com
https://www.example.com >> https://example.com
Maria
Antwort1
Was Sie beschreiben, ist mit mod_rewrite
bis zu einem gewissen Grad (scheinbar) unmöglich.
Konfigurationen aus mehreren „Ebenen“ werden in nicht gestapelt mod_rewrite
, daher wird ein in der Hauptserverkonfiguration definierter Regelsatz nicht automatisch importiert und auf eine Anforderung angewendet, die an einen delegiert wird <VirtualHost>
.
Angenommen jedoch, Sie müssen sie <VirtualHost>
sowieso irgendwann zuweisen und möchten keine weiteren Regeln im <VirtualHost>
Textkörper haben (wenn sie sich in .htaccess
oder einem <Directory>
Abschnitt befinden, ist das in Ordnung), können Sie mit Folgendem herumspielen.
In der Hauptkonfiguration nehmen wir meineAntwort auf diese verwandte Frageund wende es an:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|off
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$
RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]
Dann können wir es in jedem unserer <VirtualHost>
Abschnitte "importieren" mit demRewriteOptions
Richtlinie:
RewriteEngine On
RewriteOptions inherit
Alternativ können Sie den Regelsatz natürlich auch einfach <VirtualHost>
komplett kopieren, dadurch bleibt der jeweilige Regelsatz jedoch an einem einzigen Ort.
Beachten Sie, dass der Grund, warum ich in diesem Fall vorschlage, keine zusätzlichen Regeln <VirtualHost>
direkt zu haben, darin liegt, dass die geerbten Regeln enthalten sindnachwas auch immer Sie auf der aktuellen Konfigurationsebene definiert haben, was unbeabsichtigte Nebenwirkungen haben könnte.