2012-10-22 8 views
1

Je me demandais si quelqu'un pouvait vous aider. J'ai un ensemble de fichiers de redirection pour pointer les clients vers des pages spécifiques lorsqu'ils recherchent sur le site des mots spécifiques. Tout cela fonctionne bien avec des règles similaires ci-dessous, sauf lorsque j'essaie de passer un signe de devise GBP (£) dans la chaîne de recherche, par exemple si je voulais envoyer le client à une page appelée 'http: // www. mysite.com/offers/3-for-20.list » lorsqu'ils recherchent « 3 pour £ 20 » i ai la règle ci-dessous mis en place: -apache mod_rewrite monnaie

RewriteCond %{QUERY_STRING} ^search\=(3\+for\+£20)$ [NC] 
RewriteRule ^.* http://www.mysite.com/offers/3-for-20.list?s=%1 [L,R=301] 

J'ai essayé sans succès ci-dessus et ont été incapable de trouver quelque chose pour aider ou des caractères d'échappement qui m'aideront à cela. Je ne reçois aucune erreur les pages apparaissent en fait il termine la recherche avec succès mais ne pointe pas vers la page demandée au lieu de faire une requête comme si aucune redirection n'est configurée, plus les fichiers journaux ne montrent aucune erreur mais ont un résultat de ' ... recherche = 3 + pour +% C2% A320' HTTP/1.1 200

J'ai également essayé de mettre ce qui précède à la règle de redirection avec les mêmes résultats à savoir

RewriteCond %{QUERY_STRING} ^search\=(3\+for\+C2%A320)$ [NC] 
RewriteRule ^.* http://www.mysite.com/offers/3-for-20.list?s=%1 [L,R=301] 

quelqu'un at-il des idées sur comment je peux le faire.

Merci pour votre aide.

Répondre

0

Contrairement à l'URI, la chaîne de requête est traitée un peu différemment en fonction de l'URL d'échappement. L'URI est unescape avant d'être mis dans les règles, mais la variable de chaîne de requête est laissée déprotégés Ainsi:

search=3 for £20 

est laissé non échappés dans la variable %{QUERY_STRING}:

search=3+for+%C2%A320 

De plus, lorsque vous backrefernce la match à votre règle de réécriture, mod_rewrite veut échapper à la chaîne de requête à nouveau, vous devez lui dire de ne pas en utilisant le drapeau NE:

RewriteCond %{QUERY_STRING} ^search=(3\+for\+%C2%A320)$ [NC] 
RewriteRule ^.* http://www.mysite.com/offers/3-for-20.list?s=%1 [L,R=301,NE] 

(votre deuxième tentative a été un manque % avant la C2)

+0

oops manqués! Cela a fait l'affaire merci pour votre aide :) – Penguin