Comment procéder pour mettre en place l'url-rewriting ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comment procéder pour mettre en place l'url-rewriting ?

par bravegars » 18 mars 2008, 14:21

C'est y plus clair ?
Limpide !!!

J'en reviens pas, en quelques lignes tu m'as parfaitement expliquer comment
ça fonctionne. Et j'ai pigé tout de suite.

Pourtant j'avais lu tout un tas de tutoriaux rédigés par des soi-disant spécialistes,
et ces tutoriaux sont la plupart du temps, tellement longs et complexes,
qu'à la fin, tu n'as rien pigé, et tu t'embrouilles complètement.

Une dernière petite question, sur un système de pagination,
le principe est le même ?

On modifie donc le script pour que celui-ci indique les fausses urls ?
Je suppose que c'est pareil.

Encore merci Ryle. Tu es un as. :)

par Ryle » 18 mars 2008, 13:26

Hmm.. faut pas oublier qu'Apache, c'est juste un serveur web.. transformer les choses il sait le faire, les deviner il a du mal :) Ainsi il ne pourra pas transformer tout seul l'adresse "decoration/menuiserie.php" en "decoration/menuiserie.php?var1=info&var2=info2"


Je vais essayer de te resituer un peu le contexte, ça sera sans doute plus clair. Le problème d'un site dynamique (ou un seul fichier sert à afficher plusieurs contenu en fonction des paramètres qui lui sont passés), c'est que les moteurs de recherche ont souvent du mal a gérer les paramètres. Du coup ils référencient bien ton script, mais comme dans l'ensemble ils ne savent pas (ou savent mal) lui passer les paramètres, ils loupent la majorité des contenus possible.

Le principal intérêt de la réécriture ici, c'est de leur faciliter la vie en leur donnant une adresse sans paramètres. En réalité, ces derniers sont inclus dans le nom de la page.

Le rôle d'apache est alors d'identifier les paramètres spécifiés dans le nom de la page, et de manière transparente pour l'utilisateur ou le moteur de recherche, faire appel au bon script en lui indiquant les paramètres qu'il attend :) En gros, tu donnes un alias à l'url de ta page et apache se charge de faire la correspondance.

Dans le cas de tes url :

Code : Tout sélectionner

<a href="decoration/menuiserie.php?var1=info&var2=info2" title="Menuiserie facile">menuiserie</a> <a href="decoration/peinture.php title="Peinture"Peinture</a>
L'idée est donc de modifier la première pour que les paramètres apparaissent dans le nom (ou même le chemin) d'une page fictive qui renverra vers le bon lien. Quant à la seconde, il n'y a pas nécessité de la modifier, tu pourrais éventuellement la simplifier en lui donnant un alias plus court, mais c'est à peut près tout.

A partir de là, il y a beaucoup de possibilité... En fonction de l'url fictive que tu veux mettre en place, tu peux avoir besoin d'adapter le script php. Au plus simple (et au plus courrant), faire pointer le lien fictif "decoration/menuiserie-info-info2.html" vers "decoration/menuiserie.php?var1=info&var2=info2"
Dans ta page ton lien devient donc :

Code : Tout sélectionner

<a href="decoration/menuiserie-info-info2.html" title="Menuiserie facile">menuiserie</a>
Et au niveau d'apache, une règle va lui indiquer ce qu'il doit faire :

Code : Tout sélectionner

RewriteRule decoration/menuiserie-([a-z]+)-([a-z]+).html decoration/menuiserie.php?var1=$1&var2=$2
Ainsi, si apache reçoit une demande pour une page dont l'url contient la chaine "decoration/menuiserie-" suivit d'une série de caractère minuscules, suivit d'un "-", suivit d'une autre série de caractères minuscules, suivit de ".html", alors il doit ouvrir la page "decoration/menuiserie.php" en spécifiant comme valeur de var1 la première série de caractère minuscule, et en valeur de var2 la seconde.

Maintenant, comme je te le disais il y a énormément de possibilité selon ce que tu veux faire. On pourrait très bien avoir une règle qui dit simplement : transforme "decoration/menuiserie.php$" en "decoration/menuiserie.php?var1=info&var2=info2" et ainsi à chaque fois que tu entrerait la première url, ces deux paramètres seraient toujours spécifiés automatiquement. Mais bon, ceci pouvant se faire avec des valeurs par défaut dans ton script php, l'intérêt en est assez limité :)

C'est y plus clair ?

par bravegars » 18 mars 2008, 13:03

C'est pas tout à fait ça. Le rewriting se fait effectivement au niveau de apache qui va rediriger une url fictive vers une page existante, en récupérant au besoin les paramètres nécessaires.
Ah j'avais compris le contraire, ça me semble compliquer ce truc,
tout le monde dit que c'est super simple à mettre en place.

J'ai pas vraiment compris tes explications. Comment peut-on rediriger une page fictive
vers une page existente ?

Prenons l'exemple de deux liens de mon site.
Imaginons les liens suivants :

<a href="decoration/menuiserie.php?var1=info&var2=info2" title="Menuiserie facile">menuiserie</a>
<a href="decoration/peinture.php title="Peinture"Peinture</a>

Ici on a des urls vraies. Que faut-il faire à partir de là pour afficher des urls comme

<a href="decoration/menuiserie.php" title="Menuiserie facile">menuiserie</a>
<a href="decoration/ title="Peinture"Peinture</a>

Comment dois-je réécrire les urls, et pour obtenir quoi en fin de compte ?

C'est vraiment très confus, j'ai pas encore trouver un site qui explique
clairement comment ça fonctionne, et pourtant y en a en pagaille des sites
qui parlent de l'url-rewriting. C'est très mal expliquer en général on y comprend rien.

Et dans mes livres de PHP on y fait absolument pas référence.

par Ryle » 18 mars 2008, 09:52

C'est pas tout à fait ça. Le rewriting se fait effectivement au niveau de apache qui va rediriger une url fictive vers une page existante, en récupérant au besoin les paramètres nécessaires.

Ainsi tu peux demander à apache (via le httpd.conf ou un fichier .htaccess) de rediriger toutes les adresses du type

Code : Tout sélectionner

http://www.monsite.com/webmasters/page.html vers le script http://www.monsite.com/webmasters/mapage.php
Mais ça n'a pas un grand intérêt. Là où cela devient interessant, c'est de glisser des paramètres dans le nom de ta page fictive pour qu'ils soient transmis à ton script php.

Code : Tout sélectionner

http://www.monsite.com/webmasters/page-(info)-(info2).html vers http://www.monsite.com/webmasters/mapage.php?var1=$1&var2=$2
($1 correspond au résultat de la première parenthèse capturante, $2 à la seconde, ...)

Bon, là c'est la version basique et brutale. Il te faudra bien sur utiliser des expressions régulières pour récupérer tes paramètres (vu que ça sera pas toujours "info" en toutes lettres ;))

L'intérêt de ceci est que les pages dynamiques avec des paramètres (?var1=...) sont plus difficilement référençables par les moteurs de recherche. Avec la réécriture tu leurs facilite la vie, et donc augmente tes chances de voir ton trafic grandir également :)


Une fois cette redirection effective, il te faut alors changer tous les liens de ton site pour qu'ils respectent la nouvelle nomenclature. (bah oui, c'est bien beau d'avoir de la réécriture d'url, mais si le moteur de recherche ne voit jamais ton url écrite sous cette forme, il est pas près de l'indéxer ;))

HTH

Comment procéder pour mettre en place l'url-rewriting ?

par bravegars » 18 mars 2008, 07:12

Bonjour,

La prochaine étape du développement de mon nouveau site
serait de mettre en place l'url-rewriting.

Mes urls sont du type ...
http://www.monsite.com/webmasters/mapag ... var2=info2
ou ... http://www.monsite.com/webmasters/mapage.php

Toutes mes pages ont une terminaison en php.

Je voudrais transformer toutes les urls en des urls de ce type :
http://www.monsite.com/webmasters

Que l'on ne voit plus le nom des fichiers.

Après quelques recherches j'ai compris que cela se faisait en 2 étapes.
Transformer les urls avec PHP, puis rediriger les urls avec htaccess
vers des urls fictives.

Comment procéder ? Comment transforment-on les urls avec PHP ?
J'ai fais des recherches hier et j'ai rien trouvé pas d'exemples
clair, que des conseils ou des réponses sans exemple.
Je vous remercie pour votre aide.