Wie verwende ich die Schreibregel?
Ich muss umleiten
www.example.com/accesories
Zu
www.example.com/accesories/item
AKTUALISIEREN:Wenn ich nutze, Redirect /accesories /accesories/items
erhalte ich:
www.example.com//accesories/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/
Antwort1
Redirect /accesories /accesories/items
Ja, das führt zu einer Umleitungsschleife Redirect
, da die mod_alias-Direktive gemäßdie Apache-Dokumente(ich hebe meine eigenen hervor):
...jede Anfragemit ... anfangenDer URL-Pfad gibt eine Umleitungsanforderung an den Client am Speicherort der Ziel-URL zurück.Über den übereinstimmenden URL-Pfad hinaus werden zusätzliche Pfadinformationen an die Ziel-URL angehängt.
Wenn Sie nur diese bestimmte URL umleiten möchten, müssen Sie die RedirectMatch
Direktive verwenden*1stattdessen wird ein Abgleich mit einem regulären Ausdruck durchgeführt. Beispiel:
RedirectMatch ^/accesories$ /accesories/items
*1Sofern Sie mod_rewrite nicht bereits in anderen Anweisungen verwenden (weshalb ich gefragt habe: „Welche anderen Anweisungen haben Sie?“), ist es in diesem Fall möglicherweise vorzuziehen, stattdessen mod_rewrite zu verwenden.
"dynamisch" - weil Zubehör eine Kategorie mit Produkten ist, ich aber nicht möchte, dass die Produkte angezeigt werden und eine Weiterleitung zu /accessoires/artikeln erforderlich ist
Ich bin mir nicht ganz sicher, was Sie damit meinen, aber wenn Sie zu umleiten müssen /accesories/<products>
, /accesories/items
wobei <products>
jedes beliebige einzelne Pfadsegment sein kann, außer zu , items
müssen Sie etwa Folgendes tun, indem Sie in der RedirectMatch
Direktive einen negativen Lookahead verwenden (oder mod_rewrite verwenden). Beispiel:
RedirectMatch ^/accesories(/(?!items)[^/]*)?$ /accesories/items
Das Obige leitet /accesories
, /accesories/
und weiter /accesories/<anything>
, aber nicht /accesories/items
(weil dies eine Umleitungsschleife erzeugen würde) zu /accesories/items
.
Beachten Sie, dass es sich hierbei um 302-Weiterleitungen (vorübergehend) handelt. (Testen Sie immer mit 302-Weiterleitungen, um mögliche Caching-Probleme zu vermeiden, und wechseln Sie später nur dann zu 301, wenn dies beabsichtigt ist.)
Die Reihenfolge der Anweisungen .htaccess
kann wichtig sein. Externe Weiterleitungen müssen im Allgemeinen am Anfang der .htaccess
Datei stehen.