Hier ist ein Beispiel aus der Apache-Dokumentation zum Erzwingen kanonischer Hostnamen:
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/?(.*) http://www.example.com/$1 [L,R,NE]
Was ich gerne wissen würde ist warum das /? wird gebraucht. Ich habe versucht, es zu entfernen, und alles scheint gleich zu funktionieren. Ich hatte den Eindruck, dass der Musterteil der Umschreiberegel mit dem verglichen wurde, was nach dem Schrägstrich kommt.
quelle
RewriteRule ^/$ /homepage.std.html [L]
. Ist das ein Dokumentationsfehler?Ich bin kürzlich selbst auf dieses Problem gestoßen. Es gibt einen Unterschied zwischen der Verwendung
RewriteRule
im VirtualHost und als Teil einer .htaccess-Datei. Die folgende Regel stimmt überein (mit einer URL wie dieserexample.com/fruit/apple
:), wenn sie in einer .htaccess-Datei angezeigt wird:wird aber im VirtualHost-Kontext nicht übereinstimmen. Wenn wir uns die Apache-Dokumente ansehen, können wir Folgendes sehen:
... aber was bedeutet das? Die obige Regel würde nicht mit derselben URL übereinstimmen, wenn sie in den VirtualHost eingefügt würde, da kein führender Schrägstrich (
/
) am Anfang der Zeichenfolge stehen darf. In den Apache-Dokumenten heißt es weiter:... Wenn wir also einen Schrägstrich für .htaccess und keinen Schrägstrich für VirtualHost benötigen, wie ändern wir das Muster? Du hast es erraten. Wir müssen hinzufügen
/?
, um die folgende Bedingung in unseren regulären Ausdruck einzufügen (wobei unser Fragezeichen (?
) der Quantifizierer ist):/
am Anfang der Zeichenfolge.Jetzt stimmt unsere URL (
example.com/fruit/apple
) - Zeichenfolge überein, da wir die Tatsache behandeln, dass die Regel in der .htaccess-Datei0
Schrägstriche enthält und wenn sie vom virtualHost stammt,1
Schrägstriche enthält.Verwandte Lektüre:
quelle