Aller au contenu

Sujets conseillés

Posté (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é par hebmaster
Posté

Je dirais que tu peux mettre ça :

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^index.php?page=([a-z]+)$ /$1.php [L]

Mais je suis pas sur à 100%

Posté
Je dirais que tu peux mettre ça :

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^index.php?page=([a-z]+)$ /$1.php [L]

Mais je suis pas sur à 100%

Ca marche pas :unsure: désolé ...

j'attend toujours votre aide ... ca fait plus d'un mois que je cherche et j'ai pas encore trouvé de solution ...

Posté (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 on
RewriteRule ^([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é par hebmaster
Posté

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 on
RewriteRule ^(.+)\.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...

Posté

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 on
RewriteRule ^index.php?page=$1$ (.+)\.php [L]

Mais ca marche toujours pas :(

Posté

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).

Posté

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 ;)

Posté

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 On
RewriteCond %{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" ;)

Posté (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é par hebmaster

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...