Petit problème d'UR, besoin de vos lumières

WRInaute passionné
Bonjour a tous,

Je souhaite réécrire ce genre d'url :
- .../colocation/coloc.php?pays=pays-bas&ville=rotterdam
- .../colocation/coloc.php?pays=france&ville=le-mans
...

La 1ère et la 2ème variable transmet une valeur qui peut être composée d'un "-" pour séparer un espace.
La 2ème variable peut également servir à transmettre une valeur en chiffres.

De quelle manière dois je réécrire ceci ?

J'ai essayé avec :
Code:
RewriteRule ^colocation/([-0-9a-zA-Z]+)-([-0-9a-zA-Z]+)-colocation.html$ /colocation/coloc.php?pays=$1&ville=$2
Mais sans succès ... :cry:

Merci,
Sébastien.
 
WRInaute occasionnel
Enlève donc le premier tiret dans "[-0-9a-zA-Z]". Mieux, remplace les par des \w, ca devrait marcher aussi bien AMHA
Code:
RewriteRule ^colocation/(\w+)-(\w+)-colocation.html$ /colocation/coloc.php?pays=$1&ville=$2
 
WRInaute occasionnel
Quelle est ton erreur? 500 ou 404? Car de ca dépend la manière de résoudre ton problème...
Essaye peut être cela:

RewriteRule ^colocation/([\-0-9a-zA-Z]+)-([\-0-9a-zA-Z]+)-colocation.html$ /colocation/coloc.php?pays=$1&ville=$2

Après plus mûre reflexion, tu devrais peut être choisir un autre séparateur pour la ville et le pays. Comment savoir si un tiret fait partie intégrante du nom de la ville ou si ca signifie "fin du pays, début de la ville"?
Ce n'est que mon avis, mais je pense que des URLs du type "/colocation/france/metz/" par exemple serait peut-être plus élégant et tout aussi efficace...
 
WRInaute passionné
En fait en ce moment je suis en train de créer la partie PHP (function replace_for_mod_rewrite).
J'ai appliqué tes conseils mais cela ne fonctionne pas : le lien n'est pas transformé.

Admettons que je veuille transformer ce type d'url (sans tiret dans les valeurs des variables) :

.../colocation/coloc.php?pays=france&ville=paris

Voici ce que je met dans le fichier PHP avec la fonction replace_for_mod_rewrite :
Code:
<?php

function replace_for_mod_rewrite(&$s)
{
$urlin = 
array(
"'(?<!/\/)colocation/coloc.php\?pays=([0-9a-zA-Z]+)&ville=([0-9a-zA-Z]+)'",
);
$urlout = array(
"colocation/\\1-\\2-colocation.html",
); 
$s = preg_replace($urlin, $urlout, $s); 
return $s; 
}

?>

J'ai essayé d'autres combinaisons mais rien n'y fait.

Merci pour ton aide.
 
WRInaute occasionnel
J'ai essayé vite fait chez moi, ca fonctionne (le petit script PHP et l'URL rewriting que je t'ai donné en dernier)... Que veux-tu dire par "le lien n'est pas transformé" ?
 
WRInaute passionné
Lorsque je passe sur le lien non rewrité, il y reste (non rewrité), donc le script PHP n'est pas pris en compte.
Etrange car j'ai déjà utilisé cela a plusieurs reprises sans problème pour d'autres sites et ici pas moyen de le faire fonctionner.
 
WRInaute occasionnel
J'ai peur de ne pas saisir...
Tu veux dire que quand tu vas à l'adresse "colocation/coloc.php?pays=france&ville=le-mans", l'URL reste telle quelle dans la barre d'adresse et donc que tu n'est pas redirigé vers la page rewritée?
Ou
Quand tu utilises la fonction "replace_for_mod_rewrite", celle-ci ne fait aucune modification?

Dans le dernier cas, utilise peut-être ca:
Code:
function replace_for_mod_rewrite(&$s)
{
$urlin = "'colocation/coloc.php\?pays=([0-9a-zA-Z]+)&ville=([0-9a-zA-Z]+)'";
$urlout = "colocation/\\1-\\2-colocation.html";

$s = preg_replace($urlin, $urlout, $s);

return $s;
}
 
WRInaute passionné
Quand j'utilise la fonction "replace_for_mod_rewrite", celle ci ne fait aucune modification.
J'ai essayé ta dernière solution mais même problème.
J'en viens a me demander si il n'y a pas autre chose qui empêche le bon fonctionnement de la fonction.
 
WRInaute occasionnel
Ca marche très bien chez moi...

Code:
<?php

function replace_for_mod_rewrite(&$s)
{
$urlin = "'colocation/coloc.php\?pays=([0-9a-zA-Z]+)&ville=([0-9a-zA-Z]+)'";
$urlout = "colocation/\\1-\\2-colocation.html";

$s = preg_replace($urlin, $urlout, $s);

return $s;
}

$test = "../colocation/coloc.php?pays=france&ville=paris";

echo replace_for_mod_rewrite($test);

?>
me retourne "../colocation/france-paris-colocation.html".
Honetement, je sèche...
 
WRInaute passionné
Bizzard... j'ai fais comme toi, j'ai mis une var $test a la fin du script PHP pour voir ce que ca donnait et ca fonctionne, le echo me donne l'url au format modié comme je le souhaite. Par contre (alors que je suis tjs dans la page où les liens doivent être modifiés), les liens que je souhaite voir modifié ne bouge pas :roll:

Comment est ce possible?
 
WRInaute passionné
Apparement le problème apparait uniquement lorsque j'utilise un répertoire (dans les essais il s'agit du répertoire /colocation/).
En mettant les fichiers dans le répertoire principale du site, cela fonctionne.
 
WRInaute occasionnel
Chez moi, j'ai essayé avec succès :

/.htaccess
/index.php (avec le script de test de la fonction replace_for_mod_rewrite)
/colocation/coloc.php
 
WRInaute passionné
Ok maintenant ca fonctionne sans utiliser de repertoire :)

Mais j'ai un autre soucis : je suis dans le fichier rewrite sous la forme ...france-paris-colocation.html, la page s'affiche bien (pas d'erreur 404...) mais je n'arrive pas a recuperer la valeur des variables (coloc.php?pays=france&ville=paris).
J'ai utilise ces 2 fonctions sans succes :
- echo $HTTP_GETVARS['pays'];
- echo $_GET['pays'];

Mon .htaccess devrait etre OK puisque je ne recois pas d'erreur.
Aurais tu une idee?

Merci.
 
WRInaute occasionnel
Tu as oublié un '_' dans ta variable:
echo $HTTP_GET_VARS['pays'];

Sinon, que te dis :
echo getenv('QUERY_STRING');
?
 
WRInaute passionné
Ca va j'ai trouvé la solution, le problème venait du code PHP de la page de résultats ...

Merci beaucoup pour ton aide précieuse.
Sebastien.
 
Discussions similaires
Haut