Wie würde ich umschreiben:
http://www.example.com/?aff=number
zu:
http://www.example.com
Ich möchte alle Instanzen auf aff=x
entfernen, unabhängig von der Anzahl der anderen Parameter in der URL.
Ich möchte alle Instanzen auf
aff=x
entfernen, unabhängig von der Anzahl der anderen Parameter in der URL.
Angenommen, Sie möchten keep andere URL-Parameter (in beliebiger Reihenfolge) und einfach den Parameter aff=number
entfernen, dann können Sie mit mod_rewrite in der Stammdatei .htaccess
Folgendes tun:
RewriteCond %{QUERY_STRING} ^(.*&|)aff=\d+(?:&(.*)|)$
RewriteRule (.*) /$1?%1%2 [R=302,L]
Dies muss nach vor den vorhandenen WordPress-Anweisungen erfolgen.
Dies setzt voraus, dass der Parameter aff
nur Ziffern und mindestens eine Ziffer enthält.
Der $1
ist ein Rückverweis auf die erfasste RewriteRule
pattern . Dies behandelt also jeden URL-Pfad, nicht nur den Dokumentenstamm, wie in Ihrem Beispiel.
%1
und %2
sind Rückverweise auf die erfassten Gruppen im vorherigen CondPattern . %1
ist before der zu entfernende Parameter und %2
ist after. Beides ist optional.
Ändern Sie die (temporäre) Weiterleitung von 302
in 301
(permanent) erst, nachdem Sie bestätigt haben, dass dies in Ordnung ist (wenn dies dauerhaft sein soll).
Wenn einer der anderen URL-Parameter (die Sie beibehalten möchten) URL-codierte (% -codierte) Werte enthält, müssen Sie der Anweisung NE
(noescape
) das Flag RewriteRule
hinzufügen, um zu verhindern, dass diese Zeichen in der Anweisung doppelt codiert werden Substitution . Zum Beispiel:
RewriteRule (.*) /$1?%1%2 [NE,R=302,L]
Die Servervariable QUERY_STRING
wird von Apache nicht% -decodiert. Normalerweise codiert mod_rewrite die URL substitution , bevor die Antwort an den Client zurückgesendet wird. Dadurch werden jedoch alle bereits codierten Zeichen, die wir aus der Abfragezeichenfolge erfasst haben, doppelt codiert. Das Flag NE
verhindert dies.
Die Frage befasste sich speziell mit dem Entfernen eines URL-Parameters namens aff
, der eine "Zahl" enthielt. Im Allgemeinen sollten Sie beim Umgang mit Regex so genau wie möglich vorgehen. Wenn der zu entfernende URL-Parameter jedoch any enthalten kann, ändern Sie das CondPattern so, dass es eine der folgenden Bedeutungen hat
^(.*&|)aff=.*?(?:&(.*)|)$
- eine nicht gierige Übereinstimmung von 0 oder mehr Zeichen.^(.*&|)aff=[^&]*(?:&(.*)|)$
- stimmt mit nichts außer &
(URL-Parameter-Begrenzer) 0 oder mehrmals überein.Der wichtige Punkt in diesen beiden Regexen ist, dass der Wert , der abgeglichen wird, nicht erfasst ist, dh. Darf nicht in einfache Klammern eingeschlossen werden.
In Summe:
RewriteCond %{QUERY_STRING} ^(.*&|)aff=[^&]*(?:&(.*)|)$
RewriteRule (.*) /$1?%1%2 [NE,R=302,L]