Regel neu schreiben, wenn die Quelle ein „?“ enthält

Regel neu schreiben, wenn die Quelle ein „?“ enthält

Ich zerbreche mir den Kopf darüber. Ich habe eine alte URL:

     http://myserver/blog/archive?openview&type=Category&key=Demo

und eine neue URL

     http://myserver/blog/categories/Demo

Ich versuche, eine Umschreibregel hierfür zu erhalten. Ich dachte, sie wäre:

     ^/blog/archive\?openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L]

Aber das tut nichts. Ich habe die URL und die Regel ausprobiert (ersetzen Sie das ? durch /):

     http://myserver/blog/archive/openview&type=Category&key=Demo
     ^/blog/archive/openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L]

Und das funktioniert wie erwartet. Ich bin also etwas ratlos, wie ich mit dem ? für die Übereinstimmung in der alten URL umgehen soll. Alle Beispiele, die ich gefunden habe, beschreiben den umgekehrten Fall. Die „schöne“ URL wird an die hässliche gesendet. In meinem Fall ist die „hässliche“ URL das, was die Leute in der Vergangenheit als Lesezeichen gespeichert hatten, und ich möchte sicherstellen, dass sie die neuen Daten richtig erreichen.

Antwort1

Ein bisschen nachdenken (und lesendie Dokumentation) später:

Die mod_rewrite-Matches verwenden nur den Standortteil der URL. Das "?" markiert das Ende des Standorts und den Anfang der Parameter (auch QueryString genannt). Als ich das erkannte, war es einfacheine Google-Suche entfernt.

Für eine korrekte Transformation ist also eine Umschreibbedingung erforderlich:

RewriteCond %{QUERY_STRING}     ^openview&type=Category&key=(.*)    [NC]
RewriteRule ^/blog/archive$ /blog/categories/%1.html [NC,R=301,L]

Klappt wunderbar

verwandte Informationen