Mod rewrite, regex et autres joyeuseries

Résolu
cs_zmc Messages postés 147 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 26 avril 2008 - 25 avril 2008 à 23:25
cs_zmc Messages postés 147 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 26 avril 2008 - 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

3 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
26 avril 2008 à 00:27
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...
3
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
26 avril 2008 à 00:50
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]

à+
3
cs_zmc Messages postés 147 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 26 avril 2008 1
26 avril 2008 à 03:03
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.

 
0
Rejoignez-nous