Version complète: sur le forum Webmaster Hub : Encore un problème d'url Rewriting !
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > Fichier .htaccess et réécriture d'URLs
kinoute
Bonjour à tous,

J'utilise depuis peu Dotclear sur un hébergement OVH et je suis un adèpte des URI esthétiques ce qui implique bien entendu l'utilisation de l'Url Rewriting..

Je rencontre un problème assez lassant à ce niveau, voici mon problème !

Mes adresses sont pour l'instant du type

CODE
http://blog.hivacruz.com/index.php/15-desk-mac-heaven


Et j'aimerais les avoir sous la forme suivante :

CODE
http://blog.hivacruz.com/billet-15-desk-mac-heaven.html


A première vue rien de bien difficile, j'applique mes maigres connaissances en ce domaine pour en arriver à cet .htaccess

CODE
RewriteCond %{REQUEST_URI} !ie7

RewriteEngine on

RewriteRule ^billet-(.*).html /index.php/$1 [L]


Mais rien n'y fait, impossible de faire fonctionner ce code : Cela me renvoie toujours à l'index.. Avec les drapeaux [R,L] ça marche, mais l'url non rewritée est visible et c'est pas vraiment ce que je recherche unsure.gif

J'ai dû donc bidouillé un max pour que ça fonctionne en utilisant un petit code php pour inclure la page recherchée.. ( include(""); )

CODE
RewriteCond %{REQUEST_URI} !ie7

RewriteEngine on

RewriteRule ^billet-(.*).html /page.php?titre=$1 [L]



Et là ça fonctionne, mais j'aimerais bien pouvoir utiliser les techniques de l'url rewriting purement et simplement sans avoir à passer par d'autres scripts !

Je fais donc appel à vos lumières : Quel est le problème avec mon .htaccess cité plus haut ?

Merci à vous rolleyes.gif
Jok
Je n'apporte pas de réponse à ton problème puisque je viens moi-même d'essayer et je me retrouvais toujours sur l'index ...
Du coup je suis plutot curieux de connaitre la réponse smile.gif
Dan
Salut,

Le fait de mettre le "RewriteEngine On" après le "RewriteCond" est incorrect smile.gif
Un RewriteCond doit être suivi sans ligne blanche des réécritures à effectuer.

Donc:
CODE
RewriteEngine on
RewriteCond %{REQUEST_URI} !ie7
RewriteRule billet-(.+)\.html /index.php/$1 [L]


Mais es-tu sûr que ce que tu veux faire est de rediriger toutes les URLs ne comportant pas ie7 ?
Je ne suis pas certain de comprendre pourquoi.

Dan
kinoute
J'ai viré le RewriteCond, cela donne :

CODE
RewriteEngine on

RewriteRule ^billet-(.+)\.html /index.php/$1 [L]


Mais ça ne fonctionne pas comme vous pouvez le voir : http://blog.hivacruz.com/billet-15-desk-mac-heaven.html

Toujours l'index.. Pourtant avec l'adresse http://blog.hivacruz.com/index.php/15-desk-mac-heaven pas de problème !

Pour l'histoire du ie7, j'ai pas mal galéré auparavant pour qu'il fonctionne correctement et cette ligne faisait partie des soi-disantes solutions pour le problème que je rencontrais

Si d'autres personnes ont une idée pour l'htaccess, n'hésitez pas !

Edit: J'ai remis mon bidouillage pour l'instant en attendant de trouver une solution sad.gif
Dan
Peut-être qu'en retiant le bidouillage ou en publiant l'intégralité du fichier .htaccess on pourrait t'aider.

Parce que là on est tous "dans le noir".

As-tu essayé en enlevant le ^ du premier argument ? Parce que si Apache transmet /billet... la règle ne sera pas validée smile.gif
kinoute
( Désolé pour l'histoire du dump au passage )

Voici mon .htaccess concocté avec les bidouillages et les include ( vu que ca ne fonctionne pas )

CODE
RewriteEngine on

RewriteRule billets-(.*)\.html /index.php/$1 [L] ( pour tester d'apres ton post, résultat : toujours pareil )
RewriteRule ^billet-(.*)\.html /billet.php?titre=$1 [L]
RewriteRule ^liste-page-(.*).html /page.php?page=$1 [L]
RewriteRule ^categorie-moi-ma-vie.html$ /categorie.php?cat=Moi [L]
RewriteRule ^categorie-informatique.html$ /categorie.php?cat=Informatique [L]
RewriteRule ^categorie-musique-trance.html$ /categorie.php?cat=Musique [L]
RewriteRule ^categorie-lycee-cassini.html$ /categorie.php?cat=Cassini [L]
RewriteRule ^categorie-design-desks.html$ /categorie.php?cat=Design [L]
RewriteRule ^categorie-divers.html$ /categorie.php?cat=Divers [L]
RewriteRule ^11-desk-style-mac-blue.html /billet-11-desk-style-mac-blue.html [L]
RewriteRule ^2-hivalazy-raccourcis-texte.html /billet-2-hivalazy-raccourcis-texte.html [L]
RewriteRule ^6-biture-du-24-09.html /billet-6-biture-du-24-09.html [L]
RewriteRule ^8-alessandra-ambrosio-marcus-wallpaper.html /billet-8-alessandra-ambrosio-marcus-wallpaper.html [L]
RewriteRule ^flux-rss-billets.html$ /rss.php [L]
RewriteRule ^flux-rss-commentaires.html$ /rss.php?type=co [L]
RewriteRule ^11-desk-style-mac-blue.html /billet-11-desk-style-mac-blue.html [L]
RewriteRule ^1-bienvenue-sur-mon-journal.html /billet-1-bienvenue-sur-mon-journal.html [L]
klelugi
CITATION(kinoute @ dimanche 23 octobre 2005, 09h18)
CODE
http://blog.hivacruz.com/index.php/15-desk-mac-heaven


Et j'aimerais les avoir sous la forme suivante :

CODE
http://blog.hivacruz.com/billet-15-desk-mac-heaven.html


Salut kinoute,

Il y a quelque chose qui me dérange dans ton URL de départ...

http://blog.hivacruz.com/index.php/15-desk-mac-heaven

Cette URL me semble déjà être une réécriture, de par exemple :

http://blog.hivacruz.com/index.php?titre=id_article

Si c'est le cas il faudrait mieux faire une réécriture sur cette URL...
Dan
Dans la première règle tu mets billets et non billet ...
C'est voulu ?

Parce qu'en changeant ton URL en http://blog.hivacruz.com/billets-15-desk-mac-heaven.html , ça marche chez moi q_smallexcla.gif

Dan
kinoute
CITATION(klelugi @ mardi 25 octobre 2005, 13h03)
Salut kinoute,

Il y a quelque chose qui me dérange dans ton URL de départ...

http://blog.hivacruz.com/index.php/15-desk-mac-heaven

Cette URL me semble déjà être une réécriture, de par exemple :

http://blog.hivacruz.com/index.php?titre=id_article

Si c'est le cas il faudrait mieux faire une réécriture sur cette URL...
*


En effet, les URLs de Dotclear sont à la base sous cette forme par exemple :

CODE
http://petit.dotclear.net/pages/2005/04/22/83-faites-vous-remarquer-dans-les-commentaires


Un plug-in ( n'utilisant pas de .htaccess pour info ) permet de se ramener à des URLs du type

CODE
http://petit.dotclear.net/pages/83-faites-vous-remarquer-dans-les-commentaires


C'est ce que j'ai fait, je ne pense pas que le problème vienne de là sinon la ligne

CODE
RewriteRule ^billet-(.*)\.html /billet.php?titre=$1 [L]


dans mon htaccess ne fonctionnerait pas non plus ( pour rappel le fichier billet.php utilise simplement un include("http://blog.hivacruz.com/index.php/".$titre.""); )


CITATION(Dan @ mardi 25 octobre 2005, 13h11)
Dans la première règle tu mets billets et non billet ...
C'est voulu ?

Parce qu'en changeant ton URL en http://blog.hivacruz.com/billets-15-desk-mac-heaven.html , ça marche chez moi q_smallexcla.gif

Dan
*


C'est volontaire : j'ai juste voulu tester la condition que tu m'avais soumis juste avant sans pour autant enlever mon bidouillage d'ou le s à billets pour que je puisse tester à côté sans chambouler tout mon blog unsure.gif

Mais je ne comprends pas quand tu dis que http://blog.hivacruz.com/billets-15-desk-mac-heaven.html fonctionne chez toi, car perso c'est toujours la même chose, il me renvoie sur l'index du blog alors qu'il devrait m'afficher le billet !

C'est limite si je pense que ça vient de Dotclear toute cette histoire dry.gif

Un grand merci pour votre aide en tout cas !
Dan
Juste, ca donne la page d'accueil du Blog, et non la page demandée.

Et pourquoi fais-tu un include ?
Quelle est l'URL que demande DotClear lorsqu'on ne fait pas de réécriture pour afficher ce billet ?

Dan
kinoute
Je fais un include car cest le seul compromis qui fonctionne pour que je puisse faire de l'url rewriting jusqu'à maintenant compte-tenu qu'en utilisant les fonctions usuelles de l'htaccess ca ne veut pas :/

Pour accéder au billet sans url rewritée :

http://blog.hivacruz.com/index.php/15-desk-mac-heaven

Et sans plug-in du tout :

http://blog.hivacruz.com/index.php/2005/10...desk-mac-heaven

( Faites pas attention aux erreurs php, c'est juste un systeme pour que chaque page est un meta description différent )
Jok
Euh moi http://blog.hivacruz.com/billet-15-desk-mac-heaven.html fonction nikel maintenant ...

J'atterris bien sur l'article.
kinoute
Car le bidouillage est toujours actif tout simplement !

Essayes http://blog.hivacruz.com/billets-15-desk-mac-heaven.html ( billet avec un s, regardes à quoi il correspond dans le htaccess plus haut ) ca ne fonctionne pas
Jok
Oui effectivement, j'avais perdu le fil du sujet.
Dan
A mon sens, c'est à cause du [L] en fin de règle.

Parce qu'avec ton bidouillage cela marche, mais sans lui cela renvoie une URL de type index.php/15-desk-mac-heaven et vu le flag L il n'y a pas d'autre tentative de réécriture. Comme on ne sait pas ce que tu appelles "plug-in" et ce que fait celui-ci, on bloque à ce niveau.

Fais un essai sans ce flag [L]

Dan

CITATION(kinoute @ mardi 25 octobre 2005, 14h42)
Je fais un include car cest le seul compromis qui fonctionne pour que je puisse faire de l'url rewriting jusqu'à maintenant compte-tenu qu'en utilisant les fonctions usuelles de l'htaccess ca ne veut pas :/
*

A part le fait qu'il ne te fera pas le café ou le ménage de l'appart, je ne vois pas où le .htaccess puisse empêcher quoi que ce soit laugh.gif
Jok
J'ai essayé, je n'ai pas vu de différence.

J'ai fait des tests comme ça pour voir.
J'ai mis un htaccess :
CODE
Options +FollowSymlinks
RewriteEngine on

RewriteRule ^billet-(.*).html      index.php/$1 [L]
RewriteRule ^page-(.*).html      index.php?$1 [L]

Et un fichier index.php qui affiche seulement 2 infos :
CODE
<?php
    echo "REQUEST_URI: <b>".$_SERVER["REQUEST_URI"]."</b><br />";
    echo "QUERY_STRING: <b>".$_SERVER["QUERY_STRING"]."</b>";
?>


J'ai donc essayé 2 types d'url :
> http://www.j0k3r.net/nimp/rewrite/page-15-...mac-heaven.html
> http://www.j0k3r.net/nimp/rewrite/billet-1...mac-heaven.html

C'est bizarre, la subtilité du ? à la place du / (dans le htaccess) permet de faire fonctionner ce que cherche kinoute. Apache ferait-il des siennes avec des dossiers virtuels ? wacko.gif
kinoute
CITATION(Dan @ mardi 25 octobre 2005, 18h06)
A mon sens, c'est à cause du [L] en fin de règle.

Parce qu'avec ton bidouillage cela marche, mais sans lui cela renvoie une URL de type index.php/15-desk-mac-heaven et vu le flag L il n'y a pas d'autre tentative de réécriture. Comme on ne sait pas ce que tu appelles "plug-in" et ce que fait celui-ci, on bloque à ce niveau.

Fais un essai sans ce flag [L]

Dan
A part le fait qu'il ne te fera pas le café ou le ménage de l'appart, je ne vois pas où le .htaccess puisse empêcher quoi que ce soit laugh.gif
*


Voici les détails du plug-in m'ayant permis de réduire les permaliens sur Dotclear : http://tw.apinc.org/weblog/2005/06/07/pers...euxieme-service

Sinon, j'ai fait quelques tests supplémentaires ce matin avec ce bout d'htaccess :

CODE
RewriteEngine on

RewriteRule ^flag_r-(.*)\.html /index.php/$1 [R]
RewriteRule ^flag_l-(.*)\.html /index.php/$1 [L]
RewriteRule ^noflag-(.*)\.html /index.php/$1
RewriteRule ^billet-(.*)\.html /billet.php?titre=$1 [L]

[...]


Avec le flag [R] ça marche ( vous pouvez tester ) mais l'url non rewritée apparait chez le visiteur. Avec le flag [L] cela ne fonctionne pas, de même pour la ligne sans flag unsure.gif



CITATION(Jok @ mardi 25 octobre 2005, 18h13)
J'ai essayé, je n'ai pas vu de différence.

J'ai fait des tests comme ça pour voir.
J'ai mis un htaccess :
CODE
Options +FollowSymlinks
RewriteEngine on

RewriteRule ^billet-(.*).html      index.php/$1 [L]
RewriteRule ^page-(.*).html      index.php?$1 [L]

Et un fichier index.php qui affiche seulement 2 infos :
CODE
<?php
    echo "REQUEST_URI: <b>".$_SERVER["REQUEST_URI"]."</b><br />";
    echo "QUERY_STRING: <b>".$_SERVER["QUERY_STRING"]."</b>";
?>


J'ai donc essayé 2 types d'url :
> http://www.j0k3r.net/nimp/rewrite/page-15-...mac-heaven.html
> http://www.j0k3r.net/nimp/rewrite/billet-1...mac-heaven.html

C'est bizarre, la subtilité du ? à la place du / (dans le htaccess) permet de faire fonctionner ce que cherche kinoute. Apache ferait-il des siennes avec des dossiers virtuels ?  wacko.gif
*


Concrètement, qu'est-ce que cela signifie ? Je ne sais pas si ça peut t'aider mais sur Dotclear il y a deux types d'URLs disponible : Query string et Path Info ( mon choix s'est porté sur celui-ci )

Encore merci rolleyes.gif
davidm
Je ne suis pas rentré dans le détail et j'ai lu en diagonale, mais question bête : as tu tenu compte des modifications à appliquer du fait du module Apache customisé sur OVH, mod_ort ?
kinoute
CITATION(davidm @ jeudi 27 octobre 2005, 15h20)
Je ne suis pas rentré dans le détail et j'ai lu en diagonale, mais question bête : as tu tenu compte des modifications à appliquer du fait du module Apache customisé sur OVH, mod_ort ?
*


Je pense avoir fait ce qu'il faut, j'ai ajouté le "/" devant les URL non rewritées unsure.gif

Je comprends vraiment pas d'où ça peut venir..
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.