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
95
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 avril 2009

RewriteRule ^([a-zA-Z0-9]+)\.html$ /test/test.php?id=$1 [L]

avec le htacces ds le rep /test/
cette regle autorise seulement tous les caractères de a à z et les chiffres ds l url de destination.

RewriteRule ^coucou\.html$ /test/test.php?id=coucou [L]
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

c'est du rewrite, le dossier test n existe pas.
Messages postés
95
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 avril 2009

RewriteRule ^test\/(.+)$ /test.php?id=$1 [L]
RewriteRule ^test\/coucou$ /test.php?id=coucou [L]
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

La 1ere ligne ne marche pas, je ne vois pas trop pourquoi il y a un \
Je ne comprend pas la 2e ligne vu que coucou est une valeur variable de id
Messages postés
95
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 avril 2009

Tu dois échaper les caractères spéciaux propre au regex, tel que .  /  et bien d'autre

Essaye voir :

RewriteRule ^\/test\/(.+)$ /test.php?id=$1 [L]

Je n'ai jamais essayer de rewriter en creant un rep virtuel, et d'ailleur je suis pas sur que ce soit fesable.

Les regex sont ok, peu etre que l'absence d'extension ne lui plai pas

RewriteRule ^test\/(.*)$ /test.php?id=$1 [L]
RewriteRule ^\/test\/(.*)$ /test.php?id=$1 [L]
RewriteRule ^test\/(.*)\.html$ /test.php?id=$1 [L]
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

Le slash est pas propre au RegEx

C'est possible de faire un rep virtuel vu que je l'ai fait en mettant "aze" a la place de "search".
Ce qui ne marche pas c'est quand je met search juste et je voudrais donc savoir comment faire pour que ça marche avec le meme nom que le fichier .php
Messages postés
95
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 avril 2009

tu l'a enlever ton point d'intérogation qui traine a la fin.
et tu te trompe au sujet des regex.

^test\/([a-z]*)$ /test.php?id=$1 [L]
^test\/([a-z]*)\/$ /test.php?id=$1 [L]

monsite.com/test/coucou
monsite.com/test/coucou/

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

j'ai une erreur 500 avec ton code
Messages postés
95
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 avril 2009

Bah apparament les regex ds un htaccess ne redoute pas le / direct, peu etre elle n'aime pas l' * non plus.

^test/([a-z]+)$ /test.php?id=$1 [L]
^test/([a-z]+)/$ /test.php?id=$1 [L]
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

ça change rien vu que la chaine apres test/ n'est pas vide
Messages postés
95
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 avril 2009

non, ce fameux echappement du / sors en faite du délimiteur que j'utilise dans mes regex, qui est /

/^test\/([a-z]+)$/

voila pkoi je l'echappe
Messages postés
95
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 avril 2009

béh le rewritte est ok      ^test/([a-z]+)$

www.monsite.com/test.php?id=coucou      > Donne sur qqch ?
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

bien sur que ça donne quelquechose mais le but c'est que www.monsite.com/test/coucou donne sur www.monsite.com/test.php?id=coucou et ça ça ne marche pas
sauf si on met un truc du genre www.monsite.com/blabla/coucou qui redirige vers www.monsite.com/test.php?id=coucou
Messages postés
95
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 avril 2009

bah au pire fait que le rep est un nom different du fichier.
bizzard c't'affaire
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

ouai on dirait qu'il rewrite 2 fois
en faite il fait
www.monsite.com/test/coucou vers www.monsite.com/test.php?id=coucou
ensuite il fait
www.monsite.com/test.php?id=coucou vers www.monsite.com/.php

du coup il me sort une 404

Sinon une autre question,

si je met www.monsite.com/test/coucou qui redirige vers www.monsite.com/test.php?id=coucou

comment je fais pour que quand on aille sur www.monsite.com/test.php?id=coucou on soit redirigé vers www.monsite.com/test/coucou ?
Messages postés
95
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 avril 2009

tient bah c'est peu etre bien paske il ne trouve pas de slash derriere, tu as testé :
^test/([a-z]*)/$ /test.php?id=$1 [L]

essai voir pr etre sur que c pas autre chose qui bug :
^test/coucou/$ /test.php?id=coucou [L]
lance www.monsite.com/test/coucou/     >  error ?
-- OU --
^test/coucou$ /test.php?id=coucou [L]

lance www.monsite.com/test/coucou     >  error ?

ensuite essaye voir ça :
^test/([^/]*)/$ /test.php?id=$1 [L]
lance www.monsite.com/test/coucou/     >  error ?
[^/]*    >  prendra tout sauf un slash

pour la 2eme redirection, tu peu le faire ds la page elle meme selon l url consulté ou peu etre bien comme ça ds le htaccess :
^test.php?id=([a-z]*)$  /test/$1 [L]
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

Nan j'ai des 404 a chaque fois

sinon la redirection ne marche pas

En faite j ai une form qui envoi vers test.php avec une variable id envoyé en get
donc je voudrais qu il redirige vers test/valeur_entree

L'autre solution serait de recuperer la valeur entree en js et d envoyé vers test/valeur_recuperer lorsqu on submit la form
mais j aurais preferé une solution plus euh ... stylée ! :)
Messages postés
95
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 avril 2009

C'est ok pour ton form, bien en get comme tu dit, et qui pointe vers test.php
bizzard que ça foire

>>

Nan j'ai des 404 a chaque fois
Ces regles ne devrait pas planter, sinon c sur que t ira pas loins

^test/coucou$ /test.php?id=coucou [L]
lance www.monsite.com/test/coucou                 >  error ?
lance www.monsite.com/test.php?id=coucou     >  error ?

avec .html à la fin voir :
^test/coucou\.html$ /test.php?id=coucou [L]

lance www.monsite.com/test/coucou.html          >  error ?

lance www.monsite.com/test.php?id=coucou     >  error ?
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

ben le truc c est que si je met
RewriteRule ^test.php?id=(.+)$  test/$1
la page va bien s affichée mais dans l url j aurai test.php?id=blabla au lieu de test/blabla
c'est pourquoi je pense qu il faudrait faire une redirection
On peut le faire a partir du htaccess je pense ?
Messages postés
95
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 avril 2009

ah vi la ca te changera pas l'url
oui tu peu faire des redirections via le htaccess, RedirectQQch me semble

quel genre de valeur tu passe à id ?

error ou pas sur le test de coucou en dur ?