Principe URL rewriting

Nouveau WRInaute
(HTACCESS)

RewriteEngine On
RewriteRule ^test-1.html$ /glossaire.php?LIST=TEST[L]



Et dans ma page HTML

<a href="glossaire.php?LIST=TEST">TEST</a>

Si je clique sur ce lien, je devrais avoir une page qui s'affiche avec l'adresse test-1.html.... non ?
Ou alors je ne comprends pas bien le rewriting.

Merci de votre aide. Je ne comprends pas bien.
 
WRInaute accro
Non c'est l'inverse.

L'url rewriting permet de faire comprendre au serveur que test-1.html est la même chose que glossaire.php?list=test

mais l'url de base est toujours valide.
 
Nouveau WRInaute
Marie-Aude a dit:
Non c'est l'inverse.

L'url rewriting permet de faire comprendre au serveur que test-1.html est la même chose que glossaire.php?list=test

mais l'url de base est toujours valide.

Et si admettons je veux que suivant la variable passer à glossaire, ca me fasse une page glossaire-variable.html .

Comment faut il ecrire ?
 
WRInaute accro
Un truc du genre

RewriteEngine On
RewriteRule ^glossaire-(.*).html$ /glossaire.php?list=$1 [L]

Bonne nuit
 
WRInaute impliqué
l'URL rewriting est plutot fait pour que les liens visibles à a l'extérieur du site soient simples, par exemple test-1.html, tout en permettant des URL complexes telles que glossaire.php?LIST=TEST à l'intérieur.

Mais si tu tiens a faire l'inverse, il te faut la règle suivante:

Code:
RewriteEngine On

RewriteCond %{QUERY_STRING} LIST=(.*)$
RewriteRule glossaire\.php  /glossaire-%1.html [R=301]

Du coup, si tu clique sur un lien glossaire.php?LIST=XXX, ca redirige vers la page glossaire-XXX.html

Mais cette page n'existe probablement pas....

Si tu veux quand même afficher le contenu de glossaire.php?LIST=XXX mais afficher l'adresse en html c'est un peu plus compliqué.


Code:
RewriteEngine On

RewriteCond %{QUERY_STRING} ^LIST=(.*)$
RewriteRule glossaire\.php  /glossaire-%1.html [R=301]

RewriteRule glossaire-(.*)\.html /glossaire.php?stop&LIST=$1 [L]

Pas testé (il peut y avoir des typos), mais le principe marche c'est sûr.
 
Nouveau WRInaute
Vap a dit:
Si tu veux quand même afficher le contenu de glossaire.php?LIST=XXX mais afficher l'adresse en html c'est un peu plus compliqué.


Code:
RewriteEngine On

RewriteCond %{QUERY_STRING} ^LIST=(.*)$
RewriteRule glossaire\.php  /glossaire-%1.html [R=301]

RewriteRule glossaire-(.*)\.html /glossaire.php?stop&LIST=$1 [L]

Pas testé (il peut y avoir des typos), mais le principe marche c'est sûr.

C'est exactement celà que j'aimerais faire mais j'ai testé le code il n'affiche pas de page, pourrais tu corriger le code et m'expliquer les lignes ? :)
 
WRInaute impliqué
Rien n'indique que le code ne soit pas correct.

Est-ce que si tu entre l'adresse -http://ndd/glossaire.php?LIST=TEST

tu as l'affichage que tu veux? Teste sans aucune règle de réécriture.
 
Nouveau WRInaute
Vap a dit:
Rien n'indique que le code ne soit pas correct.

Est-ce que si tu entre l'adresse -http://ndd/glossaire.php?LIST=TEST

tu as l'affichage que tu veux? Teste sans aucune règle de réécriture.

Oui quand je tape ma page elle s'affiche correctement, sauf quand je mets les regles.
 
WRInaute impliqué
ruptor a dit:
Vap a dit:
Rien n'indique que le code ne soit pas correct.

Est-ce que si tu entre l'adresse -http://ndd/glossaire.php?LIST=TEST

tu as l'affichage que tu veux? Teste sans aucune règle de réécriture.

Oui quand je tape ma page elle s'affiche correctement, sauf quand je mets les regles.

OK.

Maintenant, si tu met ca dans le .htaccess, que se passe-t-il si tu entre l'adresse -http://ndd/glossaire-TEST.html ?

Code:
RewriteEngine On

RewriteRule glossaire-(.*)\.html /glossaire.php?LIST=$1 [L]

Et si tu entres -http://ndd/glossaire.php?stop&LIST=TEST ?
 
Nouveau WRInaute
Vap a dit:
ruptor a dit:
Vap a dit:
Rien n'indique que le code ne soit pas correct.

Est-ce que si tu entre l'adresse -http://ndd/glossaire.php?LIST=TEST

tu as l'affichage que tu veux? Teste sans aucune règle de réécriture.

Oui quand je tape ma page elle s'affiche correctement, sauf quand je mets les regles.

OK.

Maintenant, si tu met ca dans le .htaccess, que se passe-t-il si tu entre l'adresse -http://ndd/glossaire-TEST.html ?

Code:
RewriteEngine On

RewriteRule glossaire-(.*)\.html /glossaire.php?LIST=$1 [L]


La page glossaire-TEST.html fonctionne
et celle çi glossaire.php?stop&LIST=TEST fonctionne aussi

Ca à l'air d'etre bon alors :) Merci beaucoup je vais approndir celà, peux tu m'expliquer un peu le principe de lal igne et le STOP ?
Et si tu entres -http://ndd/glossaire.php?stop&LIST=TEST ?
 
WRInaute impliqué
Cette règle:

Code:
RewriteCond %{QUERY_STRING} ^LIST=(.*)$
RewriteRule glossaire\.php  /glossaire-%1.html [R=301]

réécrit -http://ndd/glossaire.php?LIST=TEST en -http://ndd/glossaire-TEST.html

Celle ci

Code:
RewriteRule glossaire-(.*)\.html /glossaire.php?LIST=$1 [L]

fait la réécriture dans l'autre sens. Elle réécrit -http://ndd/glossaire-TEST.html en -http://ndd/glossaire.php?LIST=TEST

Les deux ensembles vont donc boucler...

En ajoutant stop:

Code:
RewriteRule glossaire-(.*)\.html /glossaire.php?stop&LIST=$1 [L]

elle récrit -http://ndd/glossaire-TEST.html en -http://ndd/glossaire.php?stop&LIST=TEST

Du coup la première règle ne va pas se déclencher, car %{QUERY_STRING} commence par stop, et non par LIST=
 
Nouveau WRInaute
En fait j'ai mis que

RewriteEngine On

RewriteRule glossaire-(.*)\.html /glossaire.php?LIST=$1 [L]

Et ça à l'air de marcher dans les deux sens ?
 
WRInaute impliqué
Ca larche dans un sens.

Si tu tape l'adresse en PHP, estc-e que tu obtiens l'adresse en html dans la barre de ton navigateur? Non.

Je croyais pourtant que c'est ce que tu voulais.
 
Nouveau WRInaute
Si je mets
Code:
RewriteEngine On 
RewriteCond %{QUERY_STRING} ^LIST=(.*)$ 
RewriteRule glossaire\.php  /glossaire-%1.html [R=301]
RewriteRule glossaire-(.*)\.html /glossaire.php?stop&LIST=$1 [L]

Si je mets glossaire-variable.html, la page reste glossaire-variable.html mais me passe variable dans mon code PHP, donc la c'est bon.

Si je clique sur mon lien glossaire.php?LIST=AAA, il ne m'affiche aucune page et laisse glossaire.php?LIST=AAA

Et au niveau du referecement si on tape : glossaire AAA dans google, ca va marcher ?
 
WRInaute impliqué
ruptor a dit:
En fait j'ai mis que

RewriteEngine On

RewriteRule glossaire-(.*)\.html /glossaire.php?LIST=$1 [L]

Et ça à l'air de marcher dans les deux sens ?

Si c'est ça qui te convient, laisse comme ça.
 
Nouveau WRInaute
Vap a dit:
ruptor a dit:
En fait j'ai mis que

RewriteEngine On

RewriteRule glossaire-(.*)\.html /glossaire.php?LIST=$1 [L]

Et ça à l'air de marcher dans les deux sens ?

Si c'est ça qui te convient, laisse comme ça.

Pour le referencement c'est bon si on cherche sur google glossaire xxxx il trouvera la page la ? Bien sur pas dans les premiers :D
 
WRInaute impliqué
Si tu n'utilise que l'adresse html dans te sliens et dans tes référencements, google ne connaitra que cette adresse.
 
Nouveau WRInaute
Et si je n'utilise que le glossaire.php?..... il ne trouvera pas glossaire-xxx.html par lui meme ?
 
WRInaute impliqué
Non, comment il ferait?

C'est pour cela qu'il te faut une règle dans l'autre sens si tu veux ça.
 
Nouveau WRInaute
Donc il faut que je mette quelle ligne exactement dans le htaccess ? Pour que google trouve les HTML si je code uniquement avec le php.

Code:
RewriteCond %{QUERY_STRING} ^LIST=(.*)$ 
RewriteRule glossaire\.php  /glossaire-%1.html [R=301] 
#RewriteRule glossaire-(.*)\.html /glossaire.php?LIST=$1 [L] 
RewriteRule glossaire-(.*)\.html /glossaire.php?stop&LIST=$1 [L]

Si je mets celà j'ai uniquement glossaire-test.html qui fonctionne
Si je mets glossaire.php?LIST=test celà ne fonctionne pas
et si je decommente la ligne plus rien ne marche
 
WRInaute impliqué
Je t'ai déjà dit que la ligne commentée ne devait pas être là sinon ça boucle...

Commente la dernière ligne et regarde si tu as un affichage avec

monsite.com/glossaire.php?stop&LIST=TEST
 
Nouveau WRInaute
Vap a dit:
Je t'ai déjà dit que la ligne commentée ne devait pas être là sinon ça boucle...

Commente la dernière ligne et regarde si tu as un affichage avec

monsite.com/glossaire.php?stop&LIST=TEST



Si je mets que ça
Code:
RewriteCond %{QUERY_STRING} ^LIST=(.*)$ 
RewriteRule glossaire\.php  /glossaire-%1.html [R=301]

/glossaire.php/?LIST=TEST -> 404
glossaire.php?stop&LIST=TEST -> passes la variable TEST dans la page mais reste en page glossaire.php?stop&LIST=TEST

glossaire-test.html -> 404
 
WRInaute impliqué
Maintenant, si tu met ça:

Code:
RewriteCond %{QUERY_STRING} ^LIST=(.*)$ 
RewriteRule glossaire\.php  http://www.monsite.com/glossaire-%1.html [R=301] 
RewriteRule glossaire-(.*)\.html /glossaire.php?stop&LIST=$1 [L]

qu'est-ce qui se passe?

Normalement, si tu met glossaire-test.html ca affiche le contenu de glossaire.php?LIST=TEST, mais l'adresse reste glossaire.hmtl

Si tu mets glossaire.php?LIST=test ca devrait mettre comme adresse glossaire.html
 
WRInaute impliqué
Ca commence a me pomper.

Reprenons calmenent.

Tu met ce qui suit dans le .htaccess:

Code:
RewriteCond %{QUERY_STRING} ^LIST=(.*)$
RewriteRule glossaire\.php http://www.xxxxxxxx.fr/glossaire-%1.html [R=301]
RewriteRule glossaire-(.*)\.html /glossaire.php?stop&LIST=$1 [L]

Si tu entre - http://www.xxxx.fr/glossaire.php?stop&LIST=TEST ca doit s'afficer et l'adresse ne doit pas changer
Si tu entre - http://www.xxxx.fr/glossaire.php?LIST=TEST ca doit s'afficher et l'adresse doit etre http://www.xxxx.fr/glossaire.html
Si tu entre http://www.xxxx.fr/glossaire.html ca doit s'afficher et l'adresse doit etre http://www.xxxx.fr/glossaire.html
 
Nouveau WRInaute
Vap a dit:
Ca commence a me pomper.

Reprenons calmenent.

Tu met ce qui suit dans le .htaccess:

Code:
RewriteCond %{QUERY_STRING} ^LIST=(.*)$
RewriteRule glossaire\.php http://www.xxxxxxxx.fr/glossaire-%1.html [R=301]
RewriteRule glossaire-(.*)\.html /glossaire.php?stop&LIST=$1 [L]

Si tu entre - http://www.xxxx.fr/glossaire.php?stop&LIST=TEST ca doit s'afficer et l'adresse ne doit pas changer
Si tu entre - http://www.xxxx.fr/glossaire.php?LIST=TEST ca doit s'afficher et l'adresse doit etre http://www.xxxx.fr/glossaire.html
Si tu entre http://www.xxxx.fr/glossaire.html ca doit s'afficher et l'adresse doit etre http://www.xxxx.fr/glossaire.html

La premiere fonctionne comme tu dis
La deuxieme serveur introuvable
La troisieme erreur 404.

Restons Zen :)
 
WRInaute impliqué
Je suis zen, je suis zen...

Une idée comme ça: peux tu vider le navigateur de ton cache, quitter le navigateur, et le relancer? FF mémorise les redirections par exemple.

Sinon, es-tu sûr de ne pas avoir fait de faiutes dans le nom de domaine dans tes règles? Parce que serveur non trouvé veut dire qu'il y a une redirection vers un serveur qui n'existe pas.

De toutes façon je code ce truc sur un de mes sites pour être sûr.
 
WRInaute impliqué
Bon, ce qui suit marche chez moi (j'ai ajouté un ?, et j'ai interverti les deux règles):

Code:
RewriteEngine On

RewriteRule glossaire-(.*)\.html /glossaire.php?stop&LIST=$1 [L]

RewriteCond %{QUERY_STRING} ^LIST=(.*)$
RewriteRule glossaire\.php  http://xxxxx/glossaire-%1.html? [R=301]

Le ? à la fin de la deuxième règle sert a ne pas passer les paramètres à la page html.
 
Nouveau WRInaute
Yessss ca marche :) Merci beaucoup

Peux tu m'expliquer alors comment celà fonctionne chaque ligne :)
 
WRInaute impliqué
Code:
RewriteEngine On
Initie la réécriture

Code:
RewriteRule glossaire-(.*)\.html /glossaire.php?stop&LIST=$1 [L]
Réécrit les adresses de la forme glossaire-xxx.html en glossaire.php?stop&LIST=XXX, mais l'adresse affichée reste glossaire-XXX.html

Code:
RewriteCond %{QUERY_STRING} ^LIST=(.*)$
RewriteRule glossaire\.php  http://xxxxx/glossaire-%1.html? [R=301]
Rédirige une adresse de la forme glossaire.php?LIST=XXX vers l'adresse glossaire-XXX.html
 
WRInaute impliqué
ruptor a dit:
RewriteCond %{QUERY_STRING} ^LIST=(.*)$ et [R=301]
C'est quoi exactement ?

[R=301] c'est une redirection.

Si tu as une règle de la forme

RewriteRule page1 page2 [R=301]

quand tu entre l'adresse de page1, l'adresse afichée est changée en page2, et page2 est affichée.

Sans la redirection:

RewriteRuloe page1 page2

quand tu entre l'adresse de page1, l'adresse afichée rest page1, mais page2 est affichée.

RewriteCond est une condition.

Celle que j'ai mise regarde QUERY_STRING. C'est la partie de l'URL après un ?

Dans ton cas, si on entre l'adresse
-http://xxx/glossaire.php?LIST=TEST, alors QUERY_STRING vaudra LIST=TEST. On la compare au motif ^LIST=(.*)$, et on récupère dans %1 la valeur de ce qu'il y a entre parenthèses, donc %1=TEST dans ce cas.

Le mieux est que tu lise la doc du module mod_rewrite d'apache, autant de fois qu'il le faut. Enfin, c'est ce que je trouve de plus clair:
http://www.apachefrance.com/Manuels/Apa ... write.html

Si tu lis l'anglais, il vaut mieux prendre la verison anglaise, car elle est plus précise. Je te met la doc de la version 2.0 car elle est encore plus claire:

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
 
Nouveau WRInaute
Me revoilà pour un chtite question :)

Google peut il trouver une adresse , genre : test-test.html si celle çi n'existe pas mais que la regle renvoie vers une page test.php ?
 
WRInaute impliqué
Goiogle trouvera test-test.html s'il y a un lien vers cette adresse.

Le fait que test-test.html soit réécrit en autre chose en interne (donc pas de redirection [R=301] dans la règle) ne changera rien. Les visiteurs voient test-test.html et rien d'autre.

Je te conseille de ne faire des liens que vers tes adresses en html, et de réécrire ces adresses en php sans redirection. C'est ce que les règles dont on a discuté font.
 
Discussions similaires
Haut