Mod rewrite, regex et autres joyeuseries [Résolu]

cs_zmc 151 Messages postés vendredi 26 avril 2002Date d'inscription 26 avril 2008 Dernière intervention - 25 avril 2008 à 23:25 - Dernière réponse : cs_zmc 151 Messages postés vendredi 26 avril 2002Date d'inscription 26 avril 2008 Dernière intervention
- 26 avril 2008 à 03:03
Bonsoir,

J'utilise actuellement de la redirection d'URL via .htaccess, aucun problemes jusqu'ici, par exemple "site.com/avis=xxxx" est redirigé vers "site.com/controllers/evaluation.php?partenaire=xxxx". Je precise que tous ces liens sont en "dur" (genre ) en revanche la ou ca bloque mechamment c'est pour faire la meme chose a partir de la value d'un select, je valide mon formulaire et l'url generée est sytematiquement du type "cible.php?value=xxxx".

Deja serait il possible, et ce sans passer par des hacks javascript, de modifier la cible du formulaire (par exemple recherche=$get). J'y crois moyen....

Au pire je pourrais tres bien rediriger "recherche.php?get=xxxx" mais la encore gros probleme, de regex cette fois ci ! Pas moyen d'integrer mon "?" dans le masque de recherche, voici en gros ma ligne htaccess (les regex j'aime pas ca, mais j'imagine que ca se voit...) :

RewriteRule ^recherche.php?keywords=([a-z])$ controllers/search.php?keywords=$1

ici le ? est interpretté comme un + ou un *, j'ai egalement essayé avec \?, ., [-?], [?] etc... pas moyen... en fait j'aimerais simplement rediriger "recherche.php?get=xxxx" vers "controllers/search.php?get=xxxx" mais je n'y arrive vraiment pas, un expert (ou a defaut quelqu'un ayant pigé les regex) pourrait il me filer un petit coup de main ?

Merci d'avance
Afficher la suite 

3 réponses

Répondre au sujet
neigedhiver 2492 Messages postés jeudi 30 novembre 2006Date d'inscription 14 janvier 2011 Dernière intervention - 26 avril 2008 à 00:27
+3
Utile
Salut,

Les regex, c'est le pied intégral.

Concernant la redirection avec le mod rewrite, personnellement, je n'ai pas pu le faire ailleurs que dans le fichier httpd.conf ou dans le vhost du site. Pas dans le .htaccess
Je pense donc que ta regex est correcte, si tu y mets un \ devant ton ? (pour l'échapper, comme tu l'as compris).
Chez moi, c'est comme ça que ça se passe. Sur une Ubuntu 7.10 et sur une Gentoo 2006, toutes les deux avec Apache 2.2
RewriteRule ^/recherche.php(.*) controllers/search.php$1 [NC,R,L]

Testé et approuvé : dans le fichier de configuration du vhost, ça marche. Dans le httpd.conf, aussi, forcément. Dans le .htaccess par contre, ça fait rien du tout...
Je ne sais pas si c'est normal ou pas... Je suppose que oui... Je n'ai encore rien trouvé dans la doc d'Apache qui parle de ça : a priori, aucune limitation... sauf que dans les faits...
en revanche la ou ca bloque mechamment c'est pour faire la meme chose a
partir de la value d'un select, je valide mon formulaire et l'url
generée est sytematiquement du type "cible.php?value=xxxx".
Et pourquoi pas :
<form method="GET" action="">
</form>

D'après la spécification XHTML 1.1, l'attribut action de la balise form ( http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_extformsmodule ) doit prendre une URI valide. D'après la RFC2396 une URI peut être vide :
4.2. Same-document References

A URI reference that does not contain a URI is a reference to the
current document.

Donc si tu ne mets rien, c'est a priori valide (bon faut passer au validateur pour s'en assurer, ce que je n'ai pas fait). Alors faut voir où se trouve ton formulaire... Ca pourrait bien te donner une url de la forme keyword=xxxxx avec xxxxx le contenu du champ (input) nommé keyword.
Faut tester pour voir... Là, je dis ça sans aucune certitude... Je m'interroge, et il est trop tard pour que je fasse des tests. Mais t'as une piste à creuser.

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de neigedhiver
Evangun 1982 Messages postés dimanche 20 février 2005Date d'inscription 24 septembre 2012 Dernière intervention - 26 avril 2008 à 00:50
+3
Utile
Hello,

pour le action="" je crois que ce serait trop beau ^^ essaie peut-être action="/" mais je ne sais as si ça correspond exactement à ce que tu veux.

"RewriteRule ^/recherche.php(.*) controllers/search.php$1 [NC,R,L] Testé
et approuvé : dans le fichier de configuration du vhost, ça marche.
Dans le httpd.conf, aussi, forcément. Dans le .htaccess par contre, ça
fait rien du tout... Je ne sais pas si c'est normal ou pas..."

Pour l'url rewriting par htaccess, je crois que c'est le chemin de redirection qui est plus capricieux :
RewriteRule ^/recherche.php(.*) /controllers/search.php$1 [NC,R,L]

à+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Evangun
cs_zmc 151 Messages postés vendredi 26 avril 2002Date d'inscription 26 avril 2008 Dernière intervention - 26 avril 2008 à 03:03
0
Utile
Salut Neige, Salut Evangun, merci d'avoir repondu (si rapidement)

Alors voila, je viens de "regler" mon probleme tout a fait par hasard, seulement c'est limite plus flippant que quand ca marchais pas...

J'avais cru comprendre qu'en utilisant un masque de type ^ab$ la chaîne devait impérativement commencer par a, finir par b et basta. J'etais également parti du principe que dans mon .htaccess je devais recuperer la variable passé en paramètre via ([a-z]) puis la rediriger avec xxxx.php?var=$1. En fait j'avais tout faux, voici "la" ligne:

RewriteRule ^recherche.php$ controllers/search.php

Le action de mon form est "rechercher.php" (fichier fictif) et visiblement le passage de variable se fait automatiquement quand on utilise un formulaire get... A la limite ca parraitrai presque logique. Il est tard, j'ai encore du boulot donc j'y reflechirais plus tard mais comme vous je commence à croire que le rewritting par htaccess c'est un peu la foire aux monstres...

Chez moi, c'est comme ça que ça se passe. Sur une Ubuntu 7.10 et sur une Gentoo 2006, toutes les deux avec Apache 2.2

J'ai testé le .htaccess a la fois sur XP et sur Slack 11 ainsi que sur le serveur de production (un 1&1 formule tiers-monde Linux/Apache) et il n'a jamais fonctionné. En revanche en passant par httpd.conf aucuns problemes (etrange quand meme...).

J'avais deja entendu dire que le rewritting par .htaccess c'etait la loterie, j'y avais pas fait attention mais visiblement c'etait vrai.

Pour ce qui est du "action=''" j'y avais pensé, malheureusement ca me donné toujours un "?" (site.com/?var=xxxx) et d'apres ce que j'ai compris, en cas de get par formulaire, les "?" sont "invisibles" au htaccess... De meme si on suit la philosophie de cette fantastique norme de normalisation standard qu'est XTHML 1.1 ca m'etonnerait beaucoup que ce genre d'astuce soit valide.

Donc probleme etrange, mais probleme REGLE, encore merci pour vos reponses.

 
Commenter la réponse de cs_zmc

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.