Probleme d url rewriting

Signaler
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008
-
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008
-
Bonjour,

J'aimerais faire un rewrite qui transforme www.site.com/test/coucou en www.site.com/test.php?id=coucou

J'ai donc mis
 RewriteRule ^test/(.+)$ test.php?id=$1? [L]

Et ça ne marche pas !

Par contre quand je met
 RewriteRule ^aze/(.+)$ test.php?id=$1? [L]
ou n'imoprte quoi autre que test ça marche

Je pense donc qu'il doit réecrire 2 fois l'url donc si vous avez une solution, n'hesitez pas ! :)

36 réponses

Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

ouai toujours la meme erreur, j'ai tout essayé

sinon id ça peut etre du texte et des chiffres recuperer par une form

Me faudrais un truc du genre
Redirect test.php?id=$1 ^test/(.+)$

Je sais pas si la synthaxe est bonne
Messages postés
95
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 avril 2009

Redirect permanent test.php?id=(.+)$ /test/$1

j'me tire, ciao
bon rewrite lol
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Salut,

Est-ce que tu as désactivé Multiviews ?
Dans le .htaccess : Options -Multiviews
Ou alors dans la config d'Apache, peu importe.

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

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

ça marche tu es trop fort !!! :)

Par contre comment on fait pour acceder à /test/coucou sachant que coucou vient d'un input text d'une form ? (sans utiliser javascript ?)

ou alors faudrais faire des redirection de test.php?id=coucou vers /test/coucou
J'ai essayé dans le access mais j'ai pas reussi :(
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
J'ai simplement passé du temps à lire la doc du mod Rewrite d'apache.
Si tu vas jeter un oeil à la doc de Multiviews, tu verras pourquoi dans certains cas, il peut y avoir conflit. C'était le cas ici.

Je ne suis pas certain d'avoir bien compris ta question... Ce que tu veux, c'est que si un champ porte le nom coucou par exemple :

lors de l'envoi du formulaire, la valeur de ce champ soit passée sous la forme :
test/coucou/valeur_du_champ
C'est ça ? Parce que ça, c'est pas possible. Et à vrai dire, ça n'a pas de sens. C'est sûrement pour cela que ce n'est pas possible : la réécriture d'url répond à des besoins, de réorganisation de fichiers, de référencement. Organiser des données d'un formulaire (qui sont transparentes pour l'utilisateur lambda) c'est un peu vain et inutile...

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

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

en faite coucou c'est la valeur du champ donc /test/coucou equivaut à /test.php?id=coucou
C'est pas possible de rediriger /test.php?id=coucou vers /test/coucou ?
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
J'en suis au même point de compréhension...
Si tu as un formulaire avec un seul champ qui s'appelle id, i ln'y a AUCUN intérêt à rediriger vers /test/coucou, si c'est pour ensuite réinterpréter l'url /test/coucou...

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

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

Va sur mininova fait une recherche et regarde l url tu comprendra peut etre mieux
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Ben ouais... T'as pas du bien regarder...

search/?search=simpsons

Y'a un ? que t'as pas du bien voir...
Le champ du formulaire s'appelle search, la valeur est simpsons.

On peut envoyer un formulaire vers une url de son choix (qui peut être réécrite si on veut) mais les données du formulaire, si elles sont envoyées en GET, sont passées OBLIGATOIREMENT sous la forme donnée=valeur&autre_donnée=autre_valeur
Si tu veux changer ça, il faut changer le comportement de ton navigateur. Développe alors une extension pour Firefox.

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

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

Non c'est .org le site je suis dessus la et c'est bien du style /search/simpsons
ça doit donc etre possible
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Mais ce n'est pas le résultat de la recherche via le formulaire, c'est une url écrite par le script PHP !

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

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

Donc le script fait une redirection vers /search/simpsons ensuite le htaccess reecrit l url c'est ça ?
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Non... Le script ne fait pas une recherche...
Le fonctionnement d'un formulaire html est déterminé par le standard du protocole HTTP. Le formulaire envoie les données encodées URL, c'est à dire sous forme de paires clé/valeur, séparées par des esperluettes (&). C'est la "Query String", qui est séparée de l'URL par un point d'interrogation. Un formulaire ne procède jamais à une quelconque réécriture. Il envoie les données conformément au standard du protocole HTTP, point barre.

Une URL de la forme www.unsiteauhasard.orr/search/simpsons a été écrite de la même manière que n'importe quel texte dynamique par un script côté serveur, afin de correspondre à une url de la forme www.unsiteauhasard.org/search.php?s=simpsons , qui sera interprétée plus tard par le fichier .htaccess, qui va interpréter l'url avant de la transmettre (sous sa nouvelle forme) au serveur http.
A partir du moment où le .htaccess interprète l'url, tout se passe du côté du serveur, rien ne se voit chez le client.

L'intérêt d'écrire (à l'initiative du serveur, pas du client) une URL réécrite de la forme www.unsiteauhasard.org/search/simpsons se trouve au niveau du référencement : un moteur de recherche interprètera /search/ comme étant un répertoire, et pourra organiser les différents éléments dans cette branche. Ca n'a pas d'autre utilité.

Ton formulaire, si l'attribut action="/search/"  et method="post" produira une URL :
www.tonsite.com/search/
Les données seront envoyées par POST, de manière transparente pour l'utilisateur. La réécriture d'URL, ici, tu t'en fous, sauf si tu souhaites que la page search.php ne soit pas connue comme telle, mais comme /search/
Pour ce qui est des données, il n'y a absolument AUCUN intérêt à les "cacher" en les mettant en forme d'une certaine manière.

Je sais pas si je suis clair, je fais de mon mieux...

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

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

Oui jsuis d'accord mais ce que je comprend pas c est comment ils font a partir du formulaire pour envoyer vers www.unsiteauhasard.org/search/simpsons
tu m'as dit que c'etait a partir du script search.php mais je vois pas trop comment ils obtiennent le /simpsons

En mettant action="/search/" on obtient www.tonsite.com/search/ et pas www.tonsite.com/search/simpsons
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Hum... Moi, quand je remplis le formulaire de recherche et que je clique, j'obtiens ce genre d'url :
www.site.org/search/?search=simpsons
Donc : le formulaire est envoyé en GET. Le navigateur va "url_encode" le champ. Si tu mets plusieurs mots dans le champ, ça donnera quelque chose comme ça :
www.site/org/search/?search=simpsons+le+film

On ne PEUT PAS empêcher le point d'interrogation.

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

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

ok je vois donc on peut faire ça qu avec des liens et pas des form

J'ai compris merci :)