8796 sujets

Développement web côté serveur, CMS

Hello tout le monde,

Je suis en train de passer un gros site de ma confection au mod_rewrite et je vais changer toutes les url de ce site.

Vu que la plupart de celles-ci sont assez semblables, il va me falloir une dizaine de règles tout au plus et je n'ai pas de problème à les faire fonctionner, ce qui me chiffonne c'est que mon .htaccess mis à la racine du serveur n'est pas récursif, les sous dossiers ne sont pas affectés.

Peut-être que cela vient de mes règles mais je n'arrive pas à comprendre pourquoi.

Un exemple :
RewriteRule ^([a-z0-9_|a-z0-9-]+)/description.html$ description.php?h=$1 [L]

A savoir que description.php se trouve dans plusieurs sous-dossiers différents, mais que si je mets ça dans mon .htaccess à la racine du serveur, ça ne fonctionne pas.


De plus, est-il possible de rediriger toutes les anciennes pages vers les url réécrites ?
J'ai bien essayé avec [R=301] mais ça fait le contraire.

Merci de votre aide, je sors petit à petit de la noobitude concernant le mod_rewrite. Smiley langue
Modifié par Skoua (25 Feb 2010 - 18:10)
Salut,

ben déjà la notion de récursivité en urlrewriting n'a rien à voir avec les sous-dossiers. Smiley cligne

Ensuite je ne comprends pas ce que tu essayes de faire avec l'exemple de description.php : tu dis avoir plusieurs fichiers de ce nom là dans plusieurs répertoires différents mais tu fais la redirection vers un et un seul fichier. Smiley rolleyes

Pas compris non plus ce que tu veux dire par :
Skoua a écrit :
est-il possible de rediriger toutes les anciennes pages vers les url réécrites ?
J'ai bien essayé avec [R=301] mais ça fait le contraire.
Le statut 301 correspond à un document dont l'URL a définitivement changé mais ce n'est pas le cas ici puisque tu fais simplement de la réécriture : une url "virtuelle" renvoie vers une vraie url avec les paramètres qui vont bien.
OK bon je suis à côté de la plaque. Smiley langue

Je m'explique.

J'ai fais ce site il y a un moment et y a pas mal de choses un peu foireuses comme le fait que j'ai plusieurs fichiers tous nommés description.php dans différents répertoires de mon site. (en le refaisant de rien maintenant j'aurais mis un seul fichier description.php avec une variable de plus dans l'url mais bon, ça demande beaucoup trop de temps à l'heure actuelle).

Je voudrais faire en sorte que la règle ci-dessus puisse s'appliquer sur tous les répertoires de mon site, car pour l'instant elle ne s'applique que dans la racine du site et pas dans les sous-répertoires (si mon .htaccess est dans la racine du site).

Je ne comprends pas exactement comment faire ça en fait.


Pour ce qui est de la redirection, j'aurais voulu qu'un internaute qui arrive sur description.php?h=blabla soit "redirigé" (c'est à dire que l'url qui s'affiche dans son navigateur change) vers blabla/description.html

Je ne sais pas si c'est possible ou si c'est fabuleux de ma part mais je demandais. Smiley langue


J'espère avoir été plus clair. Smiley smile
Modifié par Skoua (25 Feb 2010 - 16:11)
Bon en fait j'ai trouvé. Smiley biggol

J'étais resté bloqué sur variable php = "variable" regexp.
Du coup en faisant ça :
RewriteRule ^([a-z]+)/([a-z_]+)/([a-z0-9_|a-z0-9-]+)/description.html$ /$1/$2/description.php?h=$3 [L]

Je règle tous mes problèmes.

Merci quand même pour l'aide. Smiley smile
Modifié par Skoua (25 Feb 2010 - 17:57)