Apache2 und rewritemap – stundenlanges Versuchen

Apache2 und rewritemap – stundenlanges Versuchen

Ich stecke beim Rewritemap-Problem fest.

Ich möchte Tausende von alten, fast zufälligen URLs auf neue umleiten. Ich werde die Karte manuell erstellen, aber ich brauche diesen Code, damit es funktioniert.

RewriteCond %{HTTP_HOST}%{REQUEST_URI}\?%{QUERY_STRING} (^example\.com.abcd.cat_4)(.*)
RewriteRule .* ${url_rewrite_map:$1|NOTFOUND}? [R=301,L]

Ich möchte, dass die Karte so aussieht:

example.com/abcd/cat_4 http://example.com/345_exact_address_of_page

Alte URLs sehen so aus:

http://example.com/abcd/cat_4=0?Xi4B7WoN;;54

und ich möchte, dass sie wie folgt umgeschrieben werden:

http://example.com/345_genaue_Seitenadresse

Ich habe vieles versucht, aber ich kriege es nicht zum Laufen ... Können Sie mir dabei helfen?

Antwort1

Sie verwenden $1 als Suchschlüssel in Ihrer Karte, aber dieser Parameter enthält nur das, was Sie in der RewriteRule erfassen. Zeichenfolgen, die Sie in Ihrer RewriteCond erfassen, werden in %1, %2 usw. erfasst.

Sie sollten also etwas in der Art verwenden:

RewriteCond %{HTTP_HOST}   (^example\.com)
RewriteCond %{REQUEST_URI} (/abcd/cat_4)
RewriteRule .* ${url_rewrite_map:%1%2|NOTFOUND} [R=301,L]

Antwort2

OK, ich habe es zum Laufen gebracht. Für alle anderen ist hier die Lösung.

RewriteCond %{HTTP_HOST}%{REQUEST_URI}\?%{QUERY_STRING} (^example\.com.abcd.abcd=.*)
RewriteRule .* ${url_rewrite_map:%1|$1}? [R=301,L]

Um auf Krist van Besiens Antwort zu antworten: Ich glaube, Sie können %1%2%3 nicht verwenden, da Sie eine Zeile davor, zwei Zeilen davor usw. verwenden. %n bezieht sich nur auf die letzte RewriteCond-Zeile, also musste ich alles in eine Zeile packen und dann die Karte überprüfen. Aber trotzdem danke, Sie haben mich in die richtige Richtung gelenkt :)

verwandte Informationen