So leiten Sie mit einer dynamischen, verschachtelten .htaccess-URL weiter

So leiten Sie mit einer dynamischen, verschachtelten .htaccess-URL weiter

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/itemserhalte 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 RedirectMatchDirektive 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/itemswobei <products>jedes beliebige einzelne Pfadsegment sein kann, außer zu , itemsmüssen Sie etwa Folgendes tun, indem Sie in der RedirectMatchDirektive 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 .htaccesskann wichtig sein. Externe Weiterleitungen müssen im Allgemeinen am Anfang der .htaccessDatei stehen.

verwandte Informationen