Je touche au but mais...

WRInaute discret
Je suis en train de finaliser la mise en place de l'url rewritting sur un petit annuaire.

Les urls sont du type

wifi-suisse.html
wifi-suisse-vaud.html
wifi-suisse-vaud-Lausanne.html
et j'ai programmé mes liens pour avoir ceci au nivau inférieur (qui est le dernier) :
wifi-suisse-vaud-Lausanne-agip.html
Le codage des liens est ok, pas de soucis. Mais mes règles d'url rewritting ne fonctionnent pas jusqu'au but :

RewriteEngine on
(1) RewriteRule ^wifi/wifi-([a-z]+)\.html$ wifi/canton.php?pays=$1 [L]
(2) RewriteRule ^wifi/wifi-([a-z]+)-([a-z]+)\.html$ wifi/ville.php?pays=$1&canton=$2 [L]
(3) RewriteRule ^wifi/wifi-(.*)-(.*)-(.*)\.html$ wifi/hotspot.php?pays=$1&canton=$2&ville=$3 [L]
(4) RewriteRule ^wifi/wifi-([a-z]+)-([a-z]+)-([a-z]+)-([a-z]+)\.html$ wifi/detail-hotspot.php?pays=$1&canton=$2&ville=$3&hotspot=$4 [L]

En effet, tout va bien jusqu'a la ligne 3 mais aprés c'est la catastrophe. En essayant de débuger, je vois que les parametres "pays" et "canton" restent collés. Vous pouvez voir le résultat sur http:**www.bef1rst.com/wifi/wifi-suisse-vaud-Lausanne.html .

Il ne me manque que cette dernière étape pour appeler convenablement ma page detail-hotspot.php mais je ne peux pas.... Alors qu'elle marche très bien quand je l'appelle de manière dynamique, avec mes paramètres...

Pouvez vous m'aider ... ? :cry:

PS: une dernière petite chose, je n'utilise que du texte dans mes paramètres. Quelle est la différence entre ([a-z]+) et (.*) ?
 
WRInaute discret
Salut,

Si je ne m'abuse, ([a-z]+) prend de 1 à "l'infini" caractère(s) alphabétique(s), et (.*) prend de 0 à "l'infini" n'importe quel(s) caractère(s).

En ce qui concerne ton problème, rien ne me choque dans l'écriture des règles. Si tu ne l'as pas fait, essaie de mettre les (.*) dans ta 4ème ligne, sinon essaie de mettre tes lignes dans l'autre sens, c'est-à-dire de la plus longue à la plus courte, paraît-il que c'est mieux.

A+

Doug
 
WRInaute discret
Salut,

merci pour la précision pour la différence entre les deux synthaxes.

J'ai tout essayé dans l'ordre des lignes ainsi que les combinaisons entre les deux synthaxes sur toutes les lignes mais pas de changements, les 2 premiers paramètres restent collés (suisse-vaud) dans mon exemple... alors qu'ils sont bien différenciés dans l'url rewritting précédent... Louche.

Une autre idée ? Je suis preneur.
 
WRInaute discret
Ok, je n'avais pas vu le lien que tu as donné. En fait ton URL rewriting fonctionne, c'est peut-être un problème dans le code qui génère l'arborescence, non ?

Si oui, balance le, on jettera un petit coup d'oeil.

Doug
 
WRInaute impliqué
(1) RewriteRule ^wifi/wifi-([a-z]+)\.html$ wifi/canton.php?pays=$1 [L]
(2) RewriteRule ^wifi/wifi-([a-z]+)-([a-z]+)\.html$ wifi/ville.php?pays=$1&canton=$2 [L]
(3) RewriteRule ^wifi/wifi-(.*)-(.*)-(.*)\.html$ wifi/hotspot.php?pays=$1&canton=$2&ville=$3 [L]
(4) RewriteRule ^wifi/wifi-([a-z]+)-([a-z]+)-([a-z]+)-([a-z]+)\.html$ wifi/detail-hotspot.php?pays=$1&canton=$2&ville=$3&hotspot=$4 [L]

je dirais que ta 3eme regle n'est pas bonne ...
(.*) signifie n'importe qu'elle caractere donc pet comprendre le - et donc apelle hotspot.php et non detail-hotspot.php
je te conseillerais de faire comme les autres lignes, pour la 3eme regle
soit
(3) RewriteRule ^wifi/wifi-([a-z]+)-([a-z]+)-([a-z]+)\.html$ wifi/hotspot.php?pays=$1&canton=$2&ville=$3 [L]
 
WRInaute discret
ville.php :

<?
include "connexion.php";

$pays = $_GET['pays'];
$canton = $_GET['canton'];

echo $pays;
echo ' > ';
echo $canton;
echo '<br><br>';

$result = mysql_query("SELECT nom_ville FROM wifi_ville WHERE canton_ville='$canton'");

while ( $row = mysql_fetch_array($result))

{
echo '<a href="wifi-';
echo $pays;
echo '-';
echo $canton;
echo '-'.$row[nom_ville]. '.html">' .$row[nom_ville]. '</a><br><br>' ;
}

mysql_close();
?>

hotspot.php :

<?
include "connexion.php";

$pays = $_GET['pays'];
$canton = $_GET['canton'];
$ville = $_GET['ville'];

echo $pays;
echo ' > ';
echo $canton;
echo ' > ';
echo $ville;
echo '<br><br>';

$result = mysql_query("SELECT nom_hotspot FROM wifi_hotspot WHERE ville_hotspot='$ville'");

while ( $row = mysql_fetch_array($result))

{
echo '<a href="wifi-';
echo $pays;
echo '-';
echo $canton;
echo '-';
echo $ville;
echo '-'.$row[nom_hotspot]. '.html">' .$row[nom_hotspot]. '</a><br><br>' ;
}

mysql_close();
?>

et detail-hotspot.php :

<?
include "connexion.php";

$pays = $_GET['pays'];
$canton = $_GET['canton'];
$ville = $_GET['ville'];
$hotspot = $_GET['hotspot'];

echo $pays;
echo ' > ';
echo $canton;
echo ' > ';
echo $ville;
echo ' > ';
echo $hotspot;
echo '<br><br>';

$result = mysql_query("SELECT nom_hotspot,adresse_hotspot,plan_hotspot FROM wifi_hotspot WHERE nom_hotspot='$hotspot'");

while ( $row = mysql_fetch_array($result))

{
echo 'Hotspot : '.$row[nom_hotspot].'<br>' ;
echo 'Adresse : '.$row[adresse_hotspot].'<br>';
echo 'Plan : <a href='.$row[plan_hotspot].'>plan</a><br><br>';
}

mysql_close();
?>

Je pense que mes liens sont bien construits. J'ai toujours pris le même modele de page en page (ville.php, hotspot.php et detail-hotspot.php). Je vois mes liens qui sont bien ecrits dans mon navigateur (essaye en pointant ta souris sur mes liens, exemple : agip , http:**www.bef1rst.com/wifi/wifi-suisse-vaud-Lausanne.html). Pour moi, le problème vient plus de l'interpretation au niveau du fichier .htaccess ... Mais je ne vois toujours pas l'erreur...
 
WRInaute discret
Oui, en effet, c'est bizarre...

Le problème ne vient pas de ton script et comme le souligne GAMING ZONE, le "-" peut être embarqué dans le (.*). Mais ceci est bizarre également, en effet, il trouve la bonne page, donc quelque part, c'est que ça fonctionne au niveau de l'URL rewriting.

J'avoue être à court d'idée pour t'aider malheureusement.

Juste, tu peux mettre des antislashes devant tes slashes dans tes règles (mais uniquement la partie \.html ; celle entourée de "^" et "$"), ça ne mange pas de pain.

Doug
 
WRInaute passionné
Sans lire exactement tes règles, je dirais qu'il faut dans un premier temps les inverser (de l'url la plus longue à la plus courte).
ca devrait résoudre ton problème.
 
WRInaute discret
Miracle ! J'ai bidouillé un peu ma synthaxe et ça marche. J'en ai profité pour remettre les lignes dans un autre ordre.

Version définitive (que je vais backuper de ce pas) :

RewriteEngine on
RewriteRule ^wifi/wifi-(.*)-(.*)-(.*)-(.*)\.html$ wifi/detail-hotspot.php?pays=$1&canton=$2&ville=$3&hotspot=$4 [L]
RewriteRule ^wifi/wifi-(.*)-(.*)-(.*)\.html$ wifi/hotspot.php?pays=$1&canton=$2&ville=$3 [L]
RewriteRule ^wifi/wifi-([a-z]+)-([a-z]+)\.html$ wifi/ville.php?pays=$1&canton=$2 [L]
RewriteRule ^wifi/wifi-([a-z]+)\.html$ wifi/canton.php?pays=$1 [L]

Merci a vous tous pour votre aide, c'est très sympa !
 
Discussions similaires
Haut