Apache mod_rewrite fügt am Ende der URL einen zusätzlichen Schrägstrich hinzu

Apache mod_rewrite fügt am Ende der URL einen zusätzlichen Schrägstrich hinzu

Ich verwende CentOS 6.0 und versuche, mod_rewrite dazu zu bringen, das „www“ aus allen URLs zu entfernen, die mit diesem Präfix beginnen. Hier ist der Code, den ich in meiner httpd.conf habe:

NOTIZ:Ich verwende einen VPS mit vollem Root-Zugriff, daher verwende ich keine .htaccess-Dateien oder „Verzeichnis-spezifische“ Einstellungen.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.aaronjwood\.com$
RewriteRule ^(.*)$ http://aaronjwood.com/$1 [R=301,L]

Dies funktioniert für alle Seiten einwandfrei, außer dass die URL geschrieben wird anhttp://aaronjwood.com//(beachten Sie die beiden Schrägstriche) oderhttp://aaronjwood.com//contact.php. Kann mir jemand helfen herauszufinden, warum das passiert?

Antwort1

Da es sich in Ihrer Hauptkonfigurationsdatei befindet und nicht in einem Verzeichnis ( <Directory>oder .htaccess), wird der führende Schrägstrich nicht aus Kontextgründen entfernt. Es fügt tatsächlich bei jeder Neuschreibung den zweiten Schrägstrich hinzu (oder versucht hinzuzufügen – ich bin mir nicht sicher, ob Apache den zusätzlichen Schrägstrich in den meisten Fällen entfernt oder ob der Client-Browser dies tut).

Berücksichtigen Sie einfach die Tatsache, dass der führende Schrägstrich in der Zeichenfolge enthalten ist, die Sie abgleichen:

RewriteRule ^/(.*)$ http://aaronjwood.com/$1 [R=301,L]

Antwort2

Da es sich direkt in einem virtuellen Host befindet, hier die Lösung: Entfernen Sie hier den Schrägstrich:http://aaronjwood.com$1

Noch ein Tipp: Wenn Sie alleine sind, ^(.*)$ist das Gleiche wie (.*).

Hier ist die Lösung:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.aaronjwood\.com$
RewriteRule (.*) http://aaronjwood.com$1 [R=301,L]

Bitte sagen Sie mir, ob es geklappt hat.

Olivier

verwandte Informationen