marcandre Posté 17 Avril 2006 Posté 17 Avril 2006 Bonjour à tous, depuis quelques temps je commence a m'intéresser à l'url rewriting. J'ai fais quelques essais mais tous infructueux. J'ai lu l'article http://www.webmaster-hub.com/publication/article5.html et j'ai fait le test avec ceci: Options +FollowSymlinksRewriteEngine onRewriteRule ^nexistepas.html$ trouve.html [L] Cela marche tres bien. J'ai un site qui utilise des adresse comme celle-ci: http://www.monsite.com/index.php?page=variable et j'aimerais utilisé l'url rewriting pour avoir ceci: http://www.monsite.com/variable.html Est-ce possible? Si cela n'est pas possible, serait-il mieux d'utiliser /index/variable.html ou /index-variable.html ? J'ai fais un test avec ce code-ci dans mon fichier .htaccess: ErrorDocument 404 /erreur404.htmRewriteEngine onRewriteRule ^index-([a-z]+).html$ index.php?page=$1 [L] Je n'obtient aucune erreur mais cela ne fonctionne pas... Bref quelqu'un aurait-il des idées ou des réponses à me suggérer? Merci à l'avance!
TheRec Posté 17 Avril 2006 Posté 17 Avril 2006 Bonsoir, Tu n'étais pas loin... si tu veux pouvoir accéder à ta page en écrivant le nom de la variable suivi de ".htm" il faut procéder ainsi : ErrorDocument 404 /erreur404.htmRewriteEngine onRewriteRule ^(.+)\.html$ index.php?page=$1 [L] Les points qui ont changé : index-([a-z]+) est devenu (.+) qui signifie au moins un caactère ou plus quel qu'il soit... (tu vera souvent (.*) ..cela permet de définir "n'importe quel caractère ou même aucun"...c'est très utile !) .html est devenu \.html car le "." s'il n'est pas échappé avec un antislash correspond à la classe de caractères "tous les caractères"...en l'occurrence tu veux l'interpréter comme un simple point Si tu le souhaites tu peux conserver ([a-z]+), mais cela limite à uniquement de caractères compris entre a et z ...et surtout en minuscules. Tu peux soit ajouter [a-zA-Z] ou ajouter un flag à la fin de la règle : [L,NC] (ou NC signifie Not Case-sensitive)
marcandre Posté 17 Avril 2006 Auteur Posté 17 Avril 2006 (modifié) Cool merci de l'explication! Avec tes conseil j'ai fait ceci et ca marche: RewriteEngine onRewriteRule ^([a-z0-9]+)\.html$ /index.php?page=$1 [L] Par contre je me suis rendu compte que j'avais d'autre sorte d'url à réécrire de ce type là: monsite.com/index.php?page=variable&sm=variable Et je veux que cela me donne ceci: /variable_variable.html ( Dans les faits j'ai: monsite.com/index.php?page=chiots_1&sm=2 par exemple) Là je vais avouer que je ne suis pas trop sûr de la règle à écrire. J'ai essyer ceci mais cela ne fonctionne pas: RewriteEngine onRewriteRule ^([a-z0-9]+)_([0-9]+)\.html$ /index.php?page=$1&sm=$2RewriteRule ^([a-z0-9]+)\.html$ /index.php?page=$1 [L] ErrorDocument 404 /erreur404.htm Des idées? Modifié 17 Avril 2006 par marcandre
Compte supprimé Posté 17 Avril 2006 Posté 17 Avril 2006 RewriteEngine onRewriteRule ^(.+)_([0-9]+)\.html$ /index.php?page=$1&sm=$2 [L]RewriteRule ^([a-z0-9]+)\.html$ /index.php?page=$1 [L]ErrorDocument 404 /erreur404.htm
marcandre Posté 17 Avril 2006 Auteur Posté 17 Avril 2006 (modifié) Ca ne fonctionne pas non plus... Le code sur ma page: <ul class="menu"><li><a href="./chiots-0.html"<?if ($sm=="1") {print (" id='current'");}?>>Minutes</a></li>...le reste du menu...</ul> Et mon .htaccess: RewriteEngine onRewriteRule ^(.*)\-(.*)\.html$ /index.php?page=$1&sm=$2 [L]RewriteRule ^([a-z]+)\.html$ /index.php?page=$1 [L] ErrorDocument 404 /erreur404.htm Et on peux voir le tout ici en cliquant sur le bouton ''Minutes'' EDIT ===> ce qui est bizarre c'est que la page chiots.html et chiots-1.html pointent a la meme place... et peut importe que j'écrive chiots_1(ou 2, 3, 4, 5, 6, etc.) ca affiche toujours la meme page mais le le surlignage dans le menu change... Modifié 17 Avril 2006 par marcandre
marcandre Posté 17 Avril 2006 Auteur Posté 17 Avril 2006 Problème réglé... en partie! En appelant les page comme suit: /chiots_0_1.html Cela fonctionne avec ce code dans le .htaccess: RewriteEngine onRewriteRule ^(.*)_([0-9])\.html$ /index.php?page=$1&sm=$2 [L]RewriteRule ^([a-z]+)\.html$ /index.php?page=$1 [L] ErrorDocument 404 /erreur404.htm Bizarre...mais ca fonctionne
TheRec Posté 17 Avril 2006 Posté 17 Avril 2006 Tu peux utiliser le caractère "-" sans l'échapper avec un antislash dans tes règles... Si tu veux testé un règle, tu as un moyen simple de voir où est redirigé (en interne)... en ajoutant le flag "R=301" à ta règle...ainsi aulieu d'effectuer la redirection en interne elle sera faite par une redirection HTTP avec status 301 ce qui te permet de voir l'URL qui est en fait utilisée, dans ta barre d'adresse. Par exemple : RewriteEngine onRewriteRule ^(.*)-([0-9]+)\.html$ /index.php?page=$1&sm=$2 [L,R=301]RewriteRule ^([a-z]+)\.html$ /index.php?page=$1 [L]ErrorDocument 404 /erreur404.htm J'ai changé ta règle un peu, vu que ton deuxième paramètre est numérique normalement, c'est mieux de forcer ceci et tu avais oublié le "+" indiquant que tu permet plus d'un chiffre (enfin je ne sais pas si c'est le cas..mais généralement c'est le cas)...ça évitera que ta règle accepte plus de requêtes que ce qui est nécessaire... Tu as une liste de flag et syntaxes possibles sur cette page du manuel Apache.
marcandre Posté 18 Avril 2006 Auteur Posté 18 Avril 2006 Merci beaucoup pour votre aide! C'est fou comment il y a des gens compétent ici!
TheRec Posté 18 Avril 2006 Posté 18 Avril 2006 De rien C'est pas pour rien que le Hub à bonne réputation...et on compte bien que tu partages des connaissances (sur ce sujet au d'autres) dès que l'occasion se présentera à toi.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant