it-swarm.com.de

Wie umleiten von Seiten mit Abfragezeichenfolge?

Ich möchte Redirect wie unten gezeigt:

https://example.com/p1/p2?sort=p.model&order=ASC&page=2

zu

https://example.com/p3/p4?sort=p.model&order=ASC&page=2

Außerdem habe ich diesen Code in meiner .htaccess -Datei:

RedirectMatch 410 ^/p1/p2&

Ich habe den folgenden Code verwendet, sehe aber nur 410 code für diese URL:

RewriteRule ^/p1/p2?sort=p.model&order=ASC&page=2$ /p3/p4?sort=p.model&order=ASC&page=2 [QSD, R=301,L]

Also habe ich RedirectMatch 410 ^/p1/p2& in Redirect 410 ^/p1/p2& geändert, aber dieses Mal habe ich 404 Code für meinen Request URI gesehen.
Was soll ich machen?

3
Pasakgroup

Versuchen Sie stattdessen Folgendes und ersetzen Sie die vorhandene RedirectMatch -Direktive:

RewriteEngine On

# Redirect "/p1/p2?sort=p.model&order=ASC&page=2" and keep query string
RewriteCond %{QUERY_STRING} ^sort=p\.model&order=ASC&page=2$
RewriteRule ^p1/p2$ /p3/p4 [R=302,L]

# Reject all requests that start "/p1/p2&" with 410 Gone
RewriteRule ^p1/p2& - [G]

Sie müssen die Abfragezeichenfolge in RewriteRuleSubstitution (dh /p3/p4) nicht wiederholen, da die Abfragezeichenfolge von der angeforderten URL standardmäßig unverändert weitergeleitet wird (vorausgesetzt, Sie setzen keine explizite Abfragezeichenfolge für Substitution Sie selbst).

Beachten Sie, dass dies eine 302 (temporäre) Umleitung ist. Ändern Sie in 301, wenn dies dauerhaft sein soll, aber erst, wenn Sie bestätigt haben, dass es in Ordnung ist. Leeren Sie vor dem Testen Ihren Browser-Cache.

Ich habe den folgenden Code verwendet, sehe aber nur 410-Code für diese URL

Es ist unklar, warum Sie eine 410-Antwort erhalten haben, es sei denn, "etwas anderes" hat dies ausgelöst. Ihre vorhandene RedirectMatch -Direktive sollte nicht übereinstimmen.

Es wird jedoch empfohlen, mod_alias (RedirectMatch und Redirect) nicht mit mod_rewrite (RewriteRule) -Anweisungen zu mischen, da dies zu unerwarteten Konflikten führen kann. Verschiedene Module werden während der Anforderung unabhängig und zu verschiedenen Zeiten ausgeführt. Sie können also feststellen, dass eine Anweisung RedirectMatch (oder Redirect) noch verarbeitet wird, obwohl eine frühere Anweisung RewriteRule die Anforderung umgeschrieben hat.

RewriteRule ^/p1/p2?sort=p.model&order=ASC&page=2$ /p3/p4?sort=p.model&order=ASC&page=2 [QSD, R=301,L]

Das macht eigentlich gar nichts. Es gibt eine Reihe von Problemen mit dieser Richtlinie (in der Reihenfolge des Schweregrads):

  • Das RewriteRuleMuster stimmt nur mit dem URL-Pfad überein, der insbesondere die Abfragezeichenfolge ausschließt. Also wird dieses Muster einfach niemals passen. (Um die Abfragezeichenfolge abzugleichen, müssen Sie eine Anweisung RewriteCond verwenden und die Servervariable QUERY_STRING prüfen, wie oben gezeigt).
  • Sie haben ein Leerzeichen in der Mitte des Flags Arguments. Dies würde bei der Verarbeitung zu einem internen Serverfehler von 500 führen ("Ungültige Flags").
  • Das Flag QSD (Query String Discard) ist redundant.
  • Es ist nicht erforderlich, dieselbe Abfragezeichenfolge in der Substitution (dh Ziel-URL) zu wiederholen, da diese standardmäßig unverändert von der angeforderten URL kopiert wird.

Also habe ich RedirectMatch 410 ^/p1/p2& in Redirect 410 ^/p1/p2& geändert, aber dieses Mal habe ich 404-Code für meine Anforderungs-URI gesehen.

Redirect 410 ^/p1/p2& würde nichts tun, da die Direktive Redirect im Gegensatz zur Direktive RedirectMatch keine Regex akzeptiert. Wie oben erwähnt, gehören diese Direktiven ohnehin zum selben Modul (mod_alias), so dass eine Änderung in Redirect in diesem Fall keinen Zweck erfüllt.

Sie bekamen wahrscheinlich eine 404, weil "nichts" passierte.

1
MrWhite