url rewriting simple

WRInaute discret
Bonjour,

Je pense depuis longtemps faire l'url rewriting pour un de mes sites et je viens de faire un test avec une règle simple mais ça ne marche pas.

Voici ce que j'ai mis dans le .htaccess, mon hébergeur les accepte.
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^index\.html$ index.php [L]
mais quand j'essaie d'appeler la page index.html j'ai une erreur 404 qui me dit que le fichier index.php n'est pas trouvé, je comprends pas

En fait je souhaite utiliser l'url rewriting ensuite sur des adresses du type recette.php?id=1 et avoir mon-titre-recette.html dans le but d'améliorer le référencement mais vu que déjà ça j'y arrive pas, c'est décourageant et comme je débute je n'arrive pas à trouver l'erreur, alors si quelqu'un pouvait m'aider ça me serait d'un grand secours

Merci d'avance :wink:
 
WRInaute passionné
Peut etre avec :
Code:
Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^index\.html$ /index.php [L]

Mais bon je ne verrais pas pourquoi.
 
WRInaute passionné
Code:
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^exemple.com$ 
RewriteRule ^(.*)   http://www.exemple.com/$1  [QSA,L,R=301]

Teste ce code pour voir
Appelle ton site sans les www
Tu dois avoir une redirection vers les www
 
WRInaute discret
Je ne comprends pas trop le truc que tu as mis plus haut mais je viens de changer ça en :
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^recette-philomene.com$
RewriteRule ^(.*) http://www.recette-philomene.com/$1 [QSA,L,R=301]

Par rapport à mon nom de domaine et quand j'appelle recette-philomene[.]Com et bien ça marche, c'était pour faire une vérification, un test sur l'url rewritting sur le serveur ?
 
WRInaute passionné
Oui c'etait pour faire un test sur le serveur.
Si ça ça marche ba je ne voit pas pourquoi ton test simple ne marche pas.
C'est un mystere.
DSL mais la je ne vois pas
 
WRInaute discret
Je viens de trouver un truc qui marche :
Options FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^(.*).html $1.php

ça ça marche pour toutes mes pages sans passage de parametre dans l'url alors c'est déjà ça :)
Ensuite va falloir que je vois comment traduire mes autres adresses, je voudrais avoir le titre de la recette dans l'url mais pour l'instant je passe l'id parce que je sais pas comment enlever les espaces et les remplacer par des tirets et les lettres accentuées !!!

J'ai vu que sur ton site tu utilises l'url rewriting et que l'url des pages c'est le titre du tableau correspondant, comment fais-tu pour enlever les caractères accentués des titres des tableaux ou bien as tu dans ta base un ligne pour chaque tableau ou tu met le titre avec les tirets et sans caractères accentués, je ne sais pas si je suis très claire là.

du genre dans ma base une ligne pour chaque recette avec le titre comme ça : blanquette-veau

Ou bien peut-on dire que Blanquette de veau doit etre traduit en blanquette-veau ???

ça fait beaucoup de question en même temps :(
 
WRInaute passionné
Voila comment supprimer les accents
Code:
<?
function suppaccents($mot){ 
$accents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ"; 
$ssaccents = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn"; 
return(strtr($mot,$accents,$ssaccents)); 
}
?>

Si tu recupere le nom de ta recette avec une requette SQL grace a l' ID de la recette tu peux utiliser comme regle:
Code:
Options FollowSymLinks 
RewriteEngine on 
RewriteBase / 
RewriteRule ^([0-9]*)-(.*).html article.php?id=$1

Apres a toi de voir comment integrer ton htaccess

Donne moi l'adresse de ton site Web s tu souhaite de l 'aide.
 
WRInaute discret
Je te remercie pour la fonction pour enlever les accents, je vais essayer, l'adresse de mon site est www[.]recette-philomene[.]com,

mais pour l'instant je passe l'id de la recette dans l'url alors il va falloir que je modifie ça pour passer le titre avant de penser à faire de l'url rewriting avec le titre dans l'adresse, non ? :?
 
WRInaute passionné
breizh_web a dit:
Mais pour l'instant je passe l'id de la recette dans l'url alors il va falloir que je modifie ça pour passer le titre avant de penser à faire de l'url rewriting avec le titre dans l'adresse, non ? :?

Non fait les deux en meme temps.
Si tu passe le titre de la recette dans ton code PHP ca va te faire beaucoup de boulot.
Change tout tes liens
Fais le htaccess en meme temps.


Exemple tu recupere l'id de la recette ainsi que son titre
Tu affiche l'adresse de ta page rewriter du style titre-de-la-recette-id.htm
Avec ton htaccess il te fera la redirection vers article.php?id=id sans tenir compte du titre de la recette.
Le tour est joué Google prendra bien en compte le titre de la recette meme si pour ton fichier PHP cela ne sert a rien.
 
WRInaute discret
Désolé j'étais absente hier !

Là je crois que je ne comprends pas tout ?

Mes liens sont du type recette.php?id=id, tu voudrais que je remplace mes liens par titre-de-la-recette.html mais comment le faire dans le htaccess, je comprend bien comment réécrire recette.php?id=id en recette-id.html mais comment dire que recette.php?id=id en titre-recette.html

Là je ne vois pas comment faire, par contre une chose est sur dans le fichier php j'ai bien de toute façon sorti le titre et l'id.

Dans le cas où on met le titre dans l'url comment est-il possible de remplacer les espaces par des tirets ?

Je ne sais pas si on peut mais est-il possible d'enlever les mots du style "le,la,les,..." pour ne pas que ça aille dans le titre sinon ça pourrait faire des titres longs quand même !!!

ça fait beaucoup de questions en une seule fois :wink:
 
WRInaute passionné
Je vais etre plus simple:

Prenons l'exemple de ta recette:
recette.php?id_recette=20
Avec comme titre de recette:
Crevettes au piment de Cayenne

Dans ton code PHP pour l'affichage de la liste des recettes:
tu modifie le lien vers la rectte qui est du style
Code:
<a href="recette.php?id_recette=$id">$titreid</a>
en
Code:
<a href="$titreid-$id.htm">$titreid</a>

Avec ton htaccess tu met:
Code:
Options FollowSymLinks 
RewriteEngine on 
RewriteBase / 
RewriteRule ^(.*)-([0-9]*).html /recette.php?id_recette=$2 [L]

Si tu souhaite supprimer les espaces et les accents, tu effectue ce bout de code avant:
Code:
function suppaccents($titreid){ 
$accents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ "; 
$ssaccents = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn-"; 
return(strtr($titreid,$accents,$ssaccents)); 
}

Maintenant tu devrais avoir un lien comme celui ci:
Code:
<a href="Crevettes-au-piment-de-Cayenne-20.htm">Crevettes au piment de Cayenne</a>


Voila je ne sais pas si j'ai été assez claire.
DSL pour les fautes d'orthographes.
 
WRInaute discret
Ce que je comprends pas ce comment le htacces permet dire que (.*) doit etre remplacer par le titre de la recette vu qu'il n'est pas dans recette.php?id_recette=id

Mes requetes se servent de $_GET["id_recette"]) pour afficher les différents élements de la recette alors qu'en sera-t-il ensuite, je n'aurais pas besoin de changer ça dans le php, enfin c'est ce que je comprends par contre je comprends vraiment pas du tout comment il va savoir que (.*) doit etre remplacer par le titre de la recette.

En plus dans mon code php je vois pas comment mettre en oeuvre suppaccents, là je me dis que je suis nulle :cry:

Enfin, voilà le code de la requete de ma page liste des recettes par exemple qui affiche une liste des recettes suivant la catégorie :
$query="select r.id, r.titre, r.img_dif, r.tps_prepa, r.tps_cuisson from recette r, recette_cat rc ";
$query.="where r.id=rc.id and (rc.nom_cat='".$name_cat."') order by r.titre";
$result=mysql_query($query,$cnx);

while($recette=mysql_fetch_array($result)){
$data["listes"].="<li class=\"liste\">
<span class=\"top liste_titre\"><a href=\"recette.php?id_recette=".$recette[id]."\"><img src=\"images/fleche.gif\" alt=\"->\" /> ".$recette[titre]."</a></span>
<span class=\"top liste_difficulte\"><img src=\"images/".$recette[img_dif]."\" alt=\"difficulté\" width=\"48px\" height=\"16px\" /></span>
<span class=\"top liste_tps_prepa\">".$recette[tps_prepa]."</span>
<span class=\"top liste_tps_cuisson\">".$recette[tps_cuisson]."</span>
</li>\n\r";
}

mais je vois pas comment mettre en oeuvre suppaccents dans la rectte pour remplacer recette.php?id_recette= dans le code par suppaccents de mon titre ???

Je ne sais pas si tu vas pouvoir m'aider là, j'espère parce que là je m'y perds, j'ai essayer supaccents sur le titre sur les pages de recette ça marche bien par contre mais c'est pas là qu'il faut que je le mette en oeuvre et dans cette requete je ne vois pas comment

Merci d'avance
:wink:
 
WRInaute passionné
Salut

Voici comment mettre en place ton php

Premier code sans la suppression d'accent:
Fichier PHP
Code:
$query="select r.id, r.titre, r.img_dif, r.tps_prepa, r.tps_cuisson from recette r, recette_cat rc "; 
$query.="where r.id=rc.id and (rc.nom_cat='".$name_cat."') order by r.titre"; 
$result=mysql_query($query,$cnx); 


while($recette=mysql_fetch_array($result)){ 
$data["listes"].="<li class=\"liste\"> 
<span class=\"top liste_titre\"><a href=\"".$recette[titre]."-".$recette[id].".htm\"><img src=\"images/fleche.gif\" alt=\"->\" /> ".$recette[titre]."</a></span> 
<span class=\"top liste_difficulte\"><img src=\"images/".$recette[img_dif]."\" alt=\"difficulté\" width=\"48px\" height=\"16px\" /></span> 
<span class=\"top liste_tps_prepa\">".$recette[tps_prepa]."</span> 
<span class=\"top liste_tps_cuisson\">".$recette[tps_cuisson]."</span> 
</li>\n\r"; 
}
Fichier Htaccess
Code:
Options FollowSymLinks 
RewriteEngine on 
RewriteBase / 
RewriteRule ^(.*)-([0-9]*).html /recette.php?id_recette=$2 [L]


Avec la suppression d 'accent mais pas sur que cela marche:
Fichier PHP
Code:
$query="select r.id, r.titre, r.img_dif, r.tps_prepa, r.tps_cuisson from recette r, recette_cat rc "; 
$query.="where r.id=rc.id and (rc.nom_cat='".$name_cat."') order by r.titre"; 
$result=mysql_query($query,$cnx); 

$recettetitresuppaccent=$recette[titre];

function suppaccents($recettetitresuppaccent){ 
$accents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ "; 
$ssaccents = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn-"; 
return(strtr($recettetitresuppaccent,$accents,$ssaccents)); 
} 

while($recette=mysql_fetch_array($result)){ 
$data["listes"].="<li class=\"liste\"> 
<span class=\"top liste_titre\"><a href=\"$recettetitresuppaccent-".$recette[id].".htm\"><img src=\"images/fleche.gif\" alt=\"->\" /> ".$recette[titre]."</a></span> 
<span class=\"top liste_difficulte\"><img src=\"images/".$recette[img_dif]."\" alt=\"difficulté\" width=\"48px\" height=\"16px\" /></span> 
<span class=\"top liste_tps_prepa\">".$recette[tps_prepa]."</span> 
<span class=\"top liste_tps_cuisson\">".$recette[tps_cuisson]."</span> 
</li>\n\r"; 
}

Fichier Htacccess ne change pas.

Quand tu dis
Ce que je comprends pas ce comment le htacces permet dire que (.*) doit etre remplacer par le titre de la recette vu qu'il n'est pas dans recette.php?id_recette=id

Je vais essayé de repondre a ta question:
Le fichier PHP appelle une page rewrité donc qui n'existe pas.
Grace au htaccess
La page demandé est renvoyé vers la veritable page Web
Ainsi, en appellant n'importe quelle page Web et avec son id nous nous retrouvons toujours avec la page de l'id
Exemple:

J'appelle la page recetteauxpoissons-12.htm
Le htaccess te redirigera vers la page recette.php?id_recette=12

J'appelle la page recetteavecviande-12.htm
Le htaccess te redirigera vers la page recette.php?id_recette=12


C'est comme cela que de nombreux site Web ce creer enormement de pages satelite.
En realite il n'existe qu'une seul page Web, mais appellé sous differents noms.

Attention a cette technique, risque de duplicate content, puis des senctions par google.



Voila je sais pas si j'ai été tres comprehensible :cry:
 
WRInaute discret
Merci si tu as été compréhensible je vais essayer de mettre ça en oeuvre dans la journée. Ne t'inquiète pas je ne créerais pas de page satellitte j'en connais les risques et je n'ai pas intérêt à faire ça pour mon site de recette qui a déjà pas mal de visites. :wink:

Merci de ton aide, maintenant à moi de tester !
 
WRInaute discret
Alors j'ai essayé plusieurs choses mais rien ne marche.

Par contre pour la fonction pour supprimer les accents je l'ai insérée dans mon fichier function comme ça elle est avec les autres donc j'ai fait un test sur recette.php en demandant d'afficher le titre de la recette pour voir si elle marche bien et ça marche j'ai bien gateau-au-chocolat à l'affichage du titre, déjà un point cette fonction marche !!! :D
En mettant ça puisque la fonction est dans mon fichier de fonction :
Code:
$data["id_titre"]=suppaccents($id_titre["titre"]);

c'est nickel
Alors sinon comme tu me le marquais plus haut j'ai tenté de réecriture les liens des recettes sur le fichier de liste des recettes, alors là ça marche pas

Si je met :
Code:
$recettesuppaccent=suppaccents($recette[titre]);
$query="select r.id, r.titre, r.img_dif, r.tps_prepa, r.tps_cuisson from recette r, recette_cat rc ";
$query.="where r.id=rc.id and (rc.nom_cat='".$name_cat."') order by r.titre";
$result=mysql_query($query,$cnx);

while($recette=mysql_fetch_array($result)){
$data["listes"].="<li class=\"liste\">
		<span class=\"top liste_titre\"><a href=\"$recettesuppaccent".$recette[id]."\"><img src=\"images/fleche.gif\" alt=\"->\" />  ".$recette[titre]."</a></span>
		<span class=\"top liste_difficulte\"><img src=\"images/".$recette[img_dif]."\" alt=\"difficulté\" width=\"48px\" height=\"16px\" /></span>
		<span class=\"top liste_tps_prepa\">".$recette[tps_prepa]."</span>
		<span class=\"top liste_tps_cuisson\">".$recette[tps_cuisson]."</span>
	</li>\n\r";
}

ça m'affiche bien la page avec la liste des recettes mais les liens sont du type http://www.recette-philomene.com/38 donc là il trouve pas la page, il pourrrait etre un peu plus autonome quand même :wink: , faut tout lui dire !!!

Je pense que ça vient de l'insertion de $recettesuppaccent dans la boucle while puisque quand je l'insère et bien la variable n'est pas dans la bonne couleur donc généralement c'est qu'il y a un soucis !

donc j'ai tenté plusieurs choses du genre :
en mettant
Code:
while($recette=mysql_fetch_array($result)){
$data["listes"].="<li class=\"liste\">
		<span class=\"top liste_titre\"><a href=\""$recettesuppaccent".$recette[id]."\"><img src=\"images/fleche.gif\" alt=\"->\" />  ".$recette[titre]."</a></span>
		<span class=\"top liste_difficulte\"><img src=\"images/".$recette[img_dif]."\" alt=\"difficulté\" width=\"48px\" height=\"16px\" /></span>
		<span class=\"top liste_tps_prepa\">".$recette[tps_prepa]."</span>
		<span class=\"top liste_tps_cuisson\">".$recette[tps_cuisson]."</span>
	</li>\n\r";
}
là la variable redevient de la bonne couleur dans le code mais erreur, la voici :
Code:
Parse error: parse error, unexpected T_VARIABLE in /home2/r/rozenn/www/essai-recette/liste.php on line 43

Code:
while($recette=mysql_fetch_array($result)){
$data["listes"].="<li class=\"liste\">
		<span class=\"top liste_titre\"><a href=\""$recettesuppaccent"".$recette[id]."\"><img src=\"images/fleche.gif\" alt=\"->\" />  ".$recette[titre]."</a></span>
		<span class=\"top liste_difficulte\"><img src=\"images/".$recette[img_dif]."\" alt=\"difficulté\" width=\"48px\" height=\"16px\" /></span>
		<span class=\"top liste_tps_prepa\">".$recette[tps_prepa]."</span>
		<span class=\"top liste_tps_cuisson\">".$recette[tps_cuisson]."</span>
	</li>\n\r";
}
entre 2 guillemets elle est toujours de la bonne couleur, mais ça marche pas toujours la même erreur

En mettant, toujours dans le while ".$recettesuppaccent.", ça marche pas j'ai toujours des liens du type http://www.recette-philomene.com/38

Alors là je ne vois pas pourquoi il ne veut pas interpreté le code !!! Cette fonction marche pourtant très bien quand je la met sur la recette j'ai bien le titre avec des tirets à la place des espaces et sans accents. :oops:
 
Discussions similaires
Haut