7 votes

remplacer un caractère dans la chaîne de requête via .htaccess

Mon client souhaite qu'une chaîne de requête soit modifiée (en remplaçant % par A) sur certaines pages.

Par exemple, je peux supprimer complètement la chaîne de requête sur les pages souhaitées via :

RewriteCond %{QUERY_STRING} !="" 
RewriteCond %{REQUEST_URI} ^/SpecialPage(.*) 
RewriteRule ^(.*)$ /$1? [R=301,L] #remove query string

Voici ce que je pensais devoir supprimer % dans la chaîne de requête et remplacer par A, mais ce n'est pas le cas :

RewriteCond %{QUERY_STRING} ^(.*)\%(.*)$
RewriteCond %{REQUEST_URI} ^/SpecialPage(.*)
RewriteRule ^(.*)$ /$1?%1A%2  [L]

Qu'est-ce que je fais de mal ? Je n'arrive pas à le repérer. Merci pour votre regard d'expert !

1voto

Jon Lin Points 88615

Tu es vraiment proche.

Le problème ici est que vous avez une condition et la correspondance de votre règle devrait être ensemble. Votre rétro-référence à la règle précédente RewriteCond est cassé parce que c'est pour le REQUEST_URI y no le site QUERY_STRING comme vous le souhaitez.

RewriteCond %{REQUEST_URI} ^/SpecialPage(.*)
RewriteRule ^(.*)$ /$1?%1A%2  [L]

Ici, le %1 La référence arrière correspond à la (.*) à la fin de la /SpecialPage URI. Les rétro-références de votre correspondance de chaîne de requête sont perdues, et ce sont elles que vous voulez vraiment. Vous pouvez combiner la condition de correspondance de REQUEST_URI avec le modèle d'expression régulière dans le champ RewriteRule :

RewriteCond %{QUERY_STRING} ^(.*)\%(.*)$
RewriteRule ^SpecialPage(.*)$ /SpecialPage$1?%1A%2  [L]

Ici, le %1 y %2 font correctement référence à la chaîne de caractères de la requête et à l'élément SpecialPage dans l'URI est satisfaite par le modèle regex.

0voto

Chaîne de requête de redirection

RewriteEngine On
RewriteCond %{QUERY_STRING} ^(. )=(. )$
RewriteRule ^(. ) ?(. )$ /$1--%0 ? [R=301,L]

De l'URL : http://localhost/sholay-slide.jsp?slide=2
Vers l'URL : http://localhost/sholay-slide.jsp--slide=2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X