Url Rewriting + récupération GET

lnsou

Nouveau WRInaute
Bonjour,

D'habitude j'arrive a m'en sortir en cherchant sur le forum mais là, je coince, j'ai donc décidé de m'inscrire pour vous posez la question :p

Alors enfaite je voudrai récupéré les variables passé en GET pour les réécrire dans l'url..

Exemple :

index.php
Code:
<form action="index.php" method="GET">
<input type="text" name="recherche"><br>
<input type="submit" name="Recherchez" value="Recherchez">
</form>

Lorsque j'envoi, je voudrais me retrouver avec une url de ce type : http://www.monsite.com/la_valeur_du_champs_recherche

donc $_GET['recherche']

J'ai fais des tonnes de test et j'ai l'impression de tourné en rond :s pourtant ça doit pas être bien compliqué..

Une idée ? une piste ? une solution ? :oops:
 

Sullyvan

WRInaute discret
bonjour et bienvenue,

si la question est de savoir comme passer de index.php?recherche=une-valeur à -http://monsite.com/recherche/une-valeur la réponse se trouve dans le javascript, donc remplacer le action="index.php" par action="javascript:traitement_formulaire()" et de traiter la soumission du formulaire dans le script avec des getElementById, et un self.location = 'recherche/....';

Inconvénient de la méthode si le javascript est désactivé le formulaire de fonctionne pas !

Autre question à se poser : est-ce utile de réécrire ce genre de requête ?
 

lnsou

Nouveau WRInaute
Sullyvan a dit:
bonjour et bienvenue,

si la question est de savoir comme passer de index.php?recherche=une-valeur à -http://monsite.com/recherche/une-valeur la réponse se trouve dans le javascript, donc remplacer le action="index.php" par action="javascript:traitement_formulaire()" et de traiter la soumission du formulaire dans le script avec des getElementById, et un self.location = 'recherche/....';

Inconvénient de la méthode si le javascript est désactivé le formulaire de fonctionne pas !

Autre question à se poser : est-ce utile de réécrire ce genre de requête ?

Euhh, pas besoin d'un sous répertoire "recherche" ...
Par contre la solution du javascript me semble plus bancal qu'autre chose..(la raison du javascript désactivé)..

J'ai d'ailleurs testé de désactivé le javacript et de testé sur un site qui fait ce que je voudrais faire..Et ca marche quand même donc il ne doit pas se servir du javascript ;)

J'pense que ca doit pas être bien compliqué de faire ca avec l'url rewriting.. nan ?
 

Sullyvan

WRInaute discret
Ce n'est pas compliqué au niveau du rewriting c'est le formatage de l'url qui est délicat en fait.

Sans passer par du javascript, je pense que la méthode suivant doit marcher:
1- soumission du formulaire vers une page qui créé l'url
Code:
<?php header('location: /'.$_GET['recherche']); ?>

2- le rewriting classique (version bourrin)
Code:
RewriteRule ^([A-Za-Z0-9])$ recherche.php?rechercher=$1 [NC]

Je veux bien l'url du site avec l'exemple pour voir comment ils font.
 

lnsou

Nouveau WRInaute
L'url du site est : http://ineedfile.com , après fait une recherche et c'est ce résultat là que j'cherche a avoir :/

J'ai essayé ton bout de script : Erreur 500 .. même en essayant de l'adapté...pareil :/
 

Sullyvan

WRInaute discret
la méthode de soumission du formulaire est la même que ce que je t'ai décrit plus haut.

j'ai oublié un + dans la formule magique
Code:
RewriteEngine on
RewriteRule ^([A-Za-z0-9]+)$ recherche.php?rechercher=$1 [NC]

ça fonctionne comme ça ?
 

Sullyvan

WRInaute discret
j'ai testé et ça fonctionne.

je résume:
1- le formulaire
Code:
<form action="formater-url.php" method="GET">
<input type="text" name="recherche"><br>
<input type="submit" name="Recherchez" value="Recherchez">
</form>

2- formater-url.php
Code:
<?php header('location: '.$_GET['recherche']); ?>

3- le fichier .htaccess
Code:
RewriteEngine on
RewriteRule ^([A-Za-z0-9]+)$ recherche.php?q=$1 [NC]

4- recherche.php
Code:
<?php echo $_GET['q']; ?>

avec en 2 une fonction qui nettoie $_GET['recherche'] pour n'avoir que les caractères autorisés
 

lnsou

Nouveau WRInaute
Ah niquel, j'ai testé, ca marche, par contre..

Code:
<?php header('location: '.$_GET['recherche']); ?>

c'est pas plutot :

Code:
<?php header('location: recherche.php?q='.$_GET['recherche']); ?>

En faite, si je laisse le premier : ca me donne bien une url comme je veux par contre, 404 not found (normal)..
C'est pourquoi recherche.php est là...
donc j'ai remplacé par le 2eme et là ça ne réécrit plus mais j'arrive bien sur recherche.php avec l'echo de $_GET['q']

il est censé réécrire recherche.php?q=$1 par $_GET['q'] nan ?


[edit]
En faite, j'ai rien dit, ca marche, mais seulement avec un mot..si je sépare par un espace, tiret, trait ==> 404
J'pense que c'est juste dans le htaccess ou il faut autorisé les caractères, j'ai pas le temps de regarder ce soir mais j'm'y replonge demain..et j'reviens faire un p'tit retour :p
[/edit]

[edit2]
Enfaite c'était bien _a.. j'ai rajouté le '-' comme caractères autorisé et hop c'est bon :D

la ligne du htaccess est maintenant :

Code:
RewriteRule ^([A-Za-z0-9-]+)$ recherche.php?q=$1 [NC]

Encore merci pour ton aide :)
[/edit2]
 

Discussions similaires

Haut