web-dev-qa-db-de.com

Entfernen Sie die Abfragezeichenfolge von der 301-Umleitungs-URL

Ich habe einige Probleme mit Weiterleitungen und konnte diese nicht zum Laufen bringen. Ich möchte folgendes machen

http://www.example.com/seasonal/christmas?p=15

umleiten zu

http://www.example.com/holiday-decor/christmas.html

Ich habe mich gefragt, ob mir jemand bei der Umschreiberegel helfen könnte, damit die Abfragezeichenfolge nicht in der umgeleiteten URL angezeigt wird. Ich verwende . Htaccess mit einer Magento-Plattform-Site.

4
mrblo0m

Standardmäßig wird die Abfragezeichenfolge der angeforderten URL an die umgeschriebene/umgeleitete URL angehängt.

In Apache 2.4 + Sie sollten das Flag QSD (Query String Discard) in der Direktive RewriteRule verwenden, um zu verwerfen die Abfragezeichenfolge von der umgeleiteten URL. Zum Beispiel:

RewriteCond %{QUERY_STRING} =p=15
RewriteRule ^seasonal/christmas$ /holiday-decor/christmas.html [QSD,R=301,L]

Die Anweisung RewriteCond ist erforderlich, um mit dem Abfragezeichenfolgeteil der angeforderten URL übereinzustimmen. (Die mit dem Muster RewriteRule übereinstimmende URL ist nur der URL-Pfad, der insbesondere die Abfragezeichenfolge ausschließt.) Das Präfix = auf dem CondPattern =p=15 gibt eine wörtliche "Zeichenfolge" -Übereinstimmung an (im Gegensatz zu einer regulären Ausdrucksweise), sodass sie genau mit p=15 übereinstimmt.

In Apache 2.2 und früheren Versionen Sie müssten stattdessen einen ? am Ende der RewriteRule -Ersetzung anhängen, um die Abfragezeichenfolge zu entfernen. Dies schreibt im Wesentlichen eine leere Abfragezeichenfolge (der ? wird nicht tatsächlich Teil der umgeleiteten URL). Beachten Sie, dass Sie die Abfragezeichenfolge in der Anforderung überschreiben, indem Sie eine beliebige Abfragezeichenfolge an die Ersetzungszeichenfolge anhängen. (Wenn Sie in dieser Situation auch die ursprüngliche Abfragezeichenfolge anhängen mussten, benötigen Sie das Flag QSA - Anhängen der Abfragezeichenfolge. Andernfalls ist dieses Flag nicht erforderlich.)

In Apache 2.2 würden Sie beispielsweise die obige Anweisung RewriteRule folgendermaßen ändern:

RewriteRule ^seasonal/christmas$ /holiday-decor/christmas.html? [R=301,L]

NB: Das Anhängen des ? funktioniert auch unter Apache 2.4. Obwohl die Verwendung des Flags QSD bevorzugt wird. Die beiden Methoden sind nicht identisch.

4
MrWhite