Comment ferais-je pour réécrire:
http://www.example.com/?aff=number
à:
http://www.example.com
Je souhaite supprimer toutes les instances sur aff=x
, quel que soit le nombre d'autres paramètres de l'URL.
Je souhaite supprimer toutes les instances sur
aff=x
, quel que soit le nombre d'autres paramètres de l'URL.
En supposant que vous souhaitiez conserver tous les autres paramètres d'URL (dans n'importe quel ordre) et simplement supprimer le paramètre aff=number
, vous pouvez alors procéder comme suit en utilisant mod_rewrite dans le fichier racine .htaccess
:
RewriteCond %{QUERY_STRING} ^(.*&|)aff=\d+(?:&(.*)|)$
RewriteRule (.*) /$1?%1%2 [R=302,L]
Cela devra aller avant les directives WordPress existantes.
Cela suppose que si le paramètre aff
est présent, sa valeur ne sera que de chiffres et d'au moins 1 chiffre.
Le $1
est une référence arrière de la RewriteRule
pattern capturée. Ainsi, cela gérera tout chemin d’URL, pas seulement la racine du document, comme dans votre exemple.
%1
et %2
sont des références arrières des groupes capturés dans le précédent CondPattern. %1
est before le paramètre à supprimer et %2
est après. Les deux sont facultatifs.
Modifiez la redirection 302
(temporaire) en 301
(permanent) uniquement après avoir confirmé que tout fonctionne correctement (si cela est destiné à être permanent).
Si l'un des autres paramètres d'URL (que vous souhaitez conserver) contient des valeurs codées en URL (codées en%), vous devez ajouter l'indicateur NE
(noescape
) à la directive RewriteRule
pour empêcher que ces caractères ne soient codés deux fois substitution. Par exemple:
RewriteRule (.*) /$1?%1%2 [NE,R=302,L]
La variable de serveur QUERY_STRING
n'est pas codée en% par Apache. Normalement, mod_rewrite URL code la substitution avant de renvoyer la réponse au client. Mais cela codera doublement tous les caractères déjà encodés que nous avons capturés à partir de la chaîne de requête. L'indicateur NE
empêche cela.
La question portait spécifiquement sur la suppression d'un paramètre d'URL appelé aff
qui contenait un "nombre". En règle générale, vous devez être aussi spécifique que possible lorsque vous utilisez regex. Toutefois, si le paramètre d'URL à supprimer peut contenir rien, modifiez le CondPattern pour qu'il ressemble à l'un des éléments suivants.
^(.*&|)aff=.*?(?:&(.*)|)$
- une correspondance non gourmande de 0 caractère ou plus.^(.*&|)aff=[^&]*(?:&(.*)|)$
- correspond à tout sauf au &
(délimiteur de paramètre d'URL) 0 fois ou plus.Le point important dans ces deux expressions rationnelles est que la valeur mise en correspondance n'est pas capturé, c'est-à-dire. ne doit pas être entouré de parenthèses simples.
En résumé:
RewriteCond %{QUERY_STRING} ^(.*&|)aff=[^&]*(?:&(.*)|)$
RewriteRule (.*) /$1?%1%2 [NE,R=302,L]