hebmaster Posté 29 Mai 2006 Posté 29 Mai 2006 (modifié) Bonjour, Voila j'avais mes pages sous cette forme : ndd.com/index.php?page=nom_de_la_page j'ai décidé de changer la structure du site (plus de nom de la page passé dans une include) et maintenant il sont sous cette forme : ndd.com/nom_de_la_page.php quel est le code a mettre ds le htaccess pour redirectionner les anciens url vers l'url exacte Merci d'avance Modifié 29 Mai 2006 par hebmaster
calim Posté 29 Mai 2006 Posté 29 Mai 2006 Je dirais que tu peux mettre ça : Options +FollowSymlinksRewriteEngine onRewriteRule ^index.php?page=([a-z]+)$ /$1.php [L] Mais je suis pas sur à 100%
hebmaster Posté 29 Mai 2006 Auteur Posté 29 Mai 2006 Je dirais que tu peux mettre ça : Options +FollowSymlinksRewriteEngine onRewriteRule ^index.php?page=([a-z]+)$ /$1.php [L] Mais je suis pas sur à 100% Ca marche pas désolé ... j'attend toujours votre aide ... ca fait plus d'un mois que je cherche et j'ai pas encore trouvé de solution ...
Jeanluc Posté 29 Mai 2006 Posté 29 Mai 2006 Bonjour, Ce que tu veux faire est expliqué ici : Mod_rewrite, ou la réécriture des URL "à la volée". Jean-Luc
hebmaster Posté 29 Mai 2006 Auteur Posté 29 Mai 2006 (modifié) Merci pour l'article , je l'ai lu presque en entier ... J'ai essayé d'ecrire un truc moi meme mais ca marche pas voila les codes que j'ai essayé mais il ne marche pas sachant que j'ai url rewrinting marche bien sur mon serveur : RewriteEngine onRewriteRule ^([a-z]+)\.php$ index.php?page=$1 [L] ou RewriteRule ^index\.php?page=([a-z]+)$ $1.php [L] RewriteRule ^index.php?page=([a-z]+)$ $1.php [L] RewriteRule ^index.php?page=([a-z]+)$ /$1.php [L] connaissez vous la raison? Modifié 29 Mai 2006 par hebmaster
TheRec Posté 29 Mai 2006 Posté 29 Mai 2006 Bonsoir, le sous-masque ([a-z]+) n'autorise que les lettres de a à z en minuscules ... est-ce que lorsque tu testes ta réécriture, tu n'utilises que ces caractères dans le nom de ta page ? Si tu veux élargir la portée de ce sous-masque tu peux éventuellement le replacer par ceci : RewriteEngine onRewriteRule ^(.+)\.php$ index.php?page=$1 [L] Le "point" signifie n'importe quel caractère. La deuxième partie peut nécessiter un "/" avant index.php cela dépend de la configuration de ton serveur. Tu peux également utiliser le flags par [R=301], ainsi tu verras (dans la barre d'adresses, car en fait mod_rewrite effectuera une redirection) vers quelle URL, Apache se tourne pour faire la réécriture. Pour les expressions que tu proposes, elles sont "erronées" dans le sens où tu ne souhaites pas réécrire une URL du type index.php?page=ma_page en ma_page.php, mais l'inverse...
hebmaster Posté 29 Mai 2006 Auteur Posté 29 Mai 2006 Moi mes anciens page sont sous cette forme ndd.com/index.php?page=nom_page mes nouvelles pages sont nom_page.php donc j'ai inversé le code : RewriteEngine onRewriteRule ^index.php?page=$1$ (.+)\.php [L] Mais ca marche toujours pas
TheRec Posté 30 Mai 2006 Posté 30 Mai 2006 Tu souhaites passer de index.php?page=nom_page à nom_page.php donc la règle dans l'ordre que je te l'ai donnée est juste, il ne faut pas l'inverser comme tu l'as fait. La première partie de la RewriteRule est une expression régulière (de type POSIX), c'est à dire un masque (composé en général de sous-masque) qui correspond à ce que l'utilisateur demandé comme URL relative (dans ton cas nom_page.php). La deuxième partie correspond à l'URL relative (si tu mets une URL absolue, avec http://, ce n'est plus une réécriture, mais une redirection) qu'utilise Apache en interne pour présenter le contenu désiré (pour toi index.php?page=nom_page). La dernière partie est l'ensemble de flags qui correspondent à la règle, les plus utiles sont cités dans l'article qu'on t'a recommandé précédemment. Bien, il faut ensuite savoir que la réécriture ne se fait pas "tout seule", tu dois modifier tes liens dans tes fichiers (x)HTML de manière à ce qu'ils correspondent à ton nouveau schéma d'URL (c'est à dire nom_page.php).
real34 Posté 30 Mai 2006 Posté 30 Mai 2006 Il me semble qu'il a modifié tous ses noms de fichiers et qu'il a juste enlevé l'include de la page index.php (c'est ce que j'ai compris). Donc actuellement tous ses liens sont de la forme index.php?page=mapage et il faut que ces liens pointent vers mapage.php Donc il faut en effet inverser l'ordre des adresses, ainsi on a : RewriteEngine on RewriteRule ^index.php?page=(.+)$ $1.php [L] Par contre, je ne sais pas si j'ai bien compris le problème
TheRec Posté 30 Mai 2006 Posté 30 Mai 2006 C'est juste, j'ai mal compris la dernière partie du problème, j'ai supposé qu'il souhaiter faire pointer l'URL sans paramètre vers celle avec paramètres...alors qu'il ne voulait plus utiliser cette dernière Le seul problème c'est que le RewriteRule ne prends pas en compte la querystring (ce qui vient après le ?). Donc il faut passer par un RewriteCond : RewriteEngine OnRewriteCond %{QUERY_STRING} ^page=(.+)$RewriteRule ^index.php$ %1.php? [L] %1 est la backreference de trouvée par RewriteCond. Le point d'interrogation après %1.php sert à ce que la querystring originale ne soit pas appondue. Si tu as besoin de prendre en compte les URL ou index.php est omis, tu peux utiliser la règle suivante : RewriteRule (^index.php$|^$) %1.php? [L] Après le RewriteCond évidemment. Si tu veux que ce soit une redirection qui soit effectuée, il te suffit de préciser l'URL complète ou doit être redirigé l'utilisateur : RewriteRule (^index.php$|^$) http://ndd.com/%1.php? [L] Apparemment le flag [R=301] ne fonctionne pas en conjonction avec RewriteCond...mais ce problème n'est pas document, il est peut-être dû à mon environnement de test... P.S.: quel est le code a mettre ds le htaccess pour redirectionner les anciens url vers l'url exacte C'est pas que je veuille jouer le professeur de français, mais "redirectionner" n'est pas un mot français... je suppose que tu voulais dire "rediriger"
hebmaster Posté 30 Mai 2006 Auteur Posté 30 Mai 2006 (modifié) Merci a lot pour votre aide j'ai enfin trouvé la solution(grave a vous) et spécialement grace à TheRec ....merci ... Voila le code que j'ai mis : RewriteCond %{QUERY_STRING} ^page=(.+)$RewriteRule (^index.php$|^$) http://www.toutrabat.com/%1.php? [L] ca marche a merveille ...et c grace a vous tks ... et je suis désolé j'ai pas tres bien expliqué bien mon probleme au debut ... Modifié 30 Mai 2006 par hebmaster
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant