Ich verwende den folgenden Code, um alle WWW-Anfragen an Nicht-WWW-URLs weiterzuleiten:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.org$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
Dies funktioniert hervorragend in einer .htaccess-Datei im Stammverzeichnis meiner Website.
Zum Beispiel
www.example.com -> example.com/
www.example.com/ -> example.com/
www.example.com/other_page -> example.com/other_page
Wenn ich jedoch denselben Code in meine VirtualHost-Konfiguration verschiebe, enthalten die neu geschriebenen URLs einen doppelten Schrägstrich.
www.example.com -> example.com//
www.example.com/ -> example.com//
www.example.com/other_page -> example.com//other_page
Ich habe es behoben, indem ich den Schrägstrich aus der Umschreiberegel entfernt habe:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.org$ [NC]
RewriteRule ^(.*)$ http://example.com$1 [R=301,L]
Aber ich kann den Grund dafür nicht verstehen. Weiß jemand warum?
quelle
RewriteRule ^/?(.*)$ http://example.com/$1 [R=301,L]
hat den Trick gemacht.Dies geschieht, weil Sie einen ersten Schrägstrich mit erfassen
(.*)
und dann an der neuen Position einen weiteren Schrägstrich davor anwenden/$1
. Dies war zuvor nicht der Fall, da sich mod_rewrite beim Betrieb in einem Verzeichniskontext etwas anders verhält als in einem Serverkontext.Sie können dies vermeiden, indem Sie den Schrägstrich optional vorwegnehmen. Darüber hinaus können Sie RedirectMatch in einem leeren VirtualHost mit Ihren überschüssigen Domänen verwenden, wodurch etwas weniger Verarbeitung entsteht und sauberer aussehen kann.
quelle
Der Vollständigkeit halber füge ich diesen Beitrag hinzu.
In der Apache-Dokumentation wird erklärt, warum dieses Verhalten sehr gut auftritt und warum die Direktive 'RewriteBase' vorhanden ist.
Durch einfaches Einfügen der Anweisung 'RewriteBase' in Ihre .htaccess-Datei sollte das gewünschte Ergebnis erzielt werden.
Beispiel:
Aus der Apache 2.2 mod_rewrite-Dokumentation:
Meine Faustregel lautet, fast immer 'RewriteBase' in .htaccess-Dateien zu verwenden und nicht in der Apache-Konfiguration.
quelle
Ich hatte keine Zeit, dieses Problem zu lösen, also schreibe einfach // nach / :)
quelle