RewriteRule et caractères spéciaux

RewriteRule et caractères spéciaux - PHP - Programmation

Marsh Posté le 08-03-2008 à 16:05:10    

Bonjour,
 
Je mets en place l'url rewriting sur mon site, je ne rencontre pas de problèmes particuliers, sauf pour les caractères spéciaux, du genre : ? # /, etc.
 
Je m'explique, j'avais des pages du style

Code :
  1. www.monsite.fr?type_recherche=orig [...] tfield=NOM


que je réécris

Code :
  1. www.monsite.fr/origine/NOM.html


 
ma règle est donc :

Code :
  1. RewriteRule /origine/(.*)\.html$ www.monsite.fr?type_recherche=orig [...] tfield=NOM [L]


 
Une erreur 404 apparaît si NOM contient un caractère spécial.  
Les variables NOM sont stockées en BD et sont des chaînes avec toute sorte de caractères.
Comment dois-je réécrire ma règle pour réussir à faire accepter les dièses et point d'interrogation?
Quelqu'un a une idée? j'ai essayer d'échapper les caratères, mais ça ne marche pas.
je ne connais pas grande chose sur les expressions régulières et c'est difficile d'avoir des réponses pertinentes quand je recherche :
RewriteRule "caractères spéciaux" # ?  
sur les moteurs.
 
Merci
alain

Reply

Marsh Posté le 08-03-2008 à 16:05:10   

Reply

Marsh Posté le 11-03-2008 à 15:55:31    

en fait ma question est par quoi remplacer le
 
/(.*)/ du RewriteRule
 
pour prendre en compte les ? et # et autres...
 
du genre
 
RewriteRule /([a-zA-Z0-9\?\" )+/...

Reply

Marsh Posté le 12-03-2008 à 09:09:19    

comportement normal à priori, par exemple pour

www.monsite.fr/origine/bla?blabla.html

Apache va utiliser

www.monsite.fr/origine/bla

Le reste de l'URL étant considéré comme paramètre (query string)
 
plusieurs solutions :
- soit tu nettoies ton champ tfield
- soit tu "urlencode" ton champ lorsque tu crées tes liens

Reply

Marsh Posté le 12-03-2008 à 09:33:07    

Oui j'utilisais le urlencode() quand mes liens étaient en clair, mais là je n'ai plus le contrôle, tout se déroule dans le .htaccess
 
ou je peux faire avaler du urlencode() au .htaccess?
comment?
 
merci

Reply

Marsh Posté le 12-03-2008 à 09:40:59    

globule-chat a écrit :

mais là je n'ai plus le contrôle, tout se déroule dans le .htaccess

non, c'est toi qui crée les liens pas le htaccess

Reply

Marsh Posté le 12-03-2008 à 09:55:55    

à quel moment je dois intervenir alors?
quand je passe une variable avec la valeur UGLY?, directement sur mon navigateur sur mon lien htpp, j'ai une erreur 404 et impossible de récupérer cette variable dans mes fichiers php
si je passe la variable encodée à la main UGLY%3F, là tout se déroule normalement.
 
Sauf que je vois pas à quel moment je peux encoder en interne le ? en %3F. à l'origine les variables sont stockées dans une base de données, où sont saisies dans un champ de recherche par les visiteurs du site, y'a peu de chances qu'ils saississent le ? en hexa...
 
merci

Reply

Marsh Posté le 12-03-2008 à 10:06:49    

j'imagine que tes liens ne se crées pas tout seul sur ton site, tu fais un truc genre

Code :
  1. echo '<a href="',$truc,'" >lien</a>';

donc c'est à ce moment là que tu interviens


Message édité par soju le 12-03-2008 à 10:07:57
Reply

Marsh Posté le 12-03-2008 à 10:43:17    

Oui ok, ça veut dire pas mal de code à reprendre...
Je voulais savoir s'il y'avait pas une solution plus light, juste une petite option à ajouter dans le .htaccess avant de me lancer dans la modif des .php
 
merci beaucoup pour l'aide en tout cas

Reply

Marsh Posté le 12-03-2008 à 10:58:51    

tu peux modifier ton script pour qu'il gère lui même la réécriture,
genre dans ton htaccess tu mets

RewriteRule . index.php

et dans index.php tu parse l'url pour faire ce qu'il faut
 
mais bon, pas très propre vu que tes urls ne respectent pas les standards

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed