URL rewriting récalcitrante

URL rewriting récalcitrante - Divers - Programmation

Marsh Posté le 18-03-2008 à 12:07:19    

Bonjour,
 
Je suis en train d'essayer de mettre en place de l'url rewriting pour un site que je maintient et qui a changé récemment d'url.
Les principes de fonctionnements sont les suivants :
 
adfi.dyndns.org doit être renvoyé vers www.adfi.info
adfi.info doit être renvoyé vers www.adfi.info
accueil.html doit être compris pas le serveur comme étant index.php?id=accueil (accueil est un exemple)
et index.php?id=accueil doit être réécrit en accueil.html (accueil est un exemple)
 
Hors, pour le moment, tout marche sauf un cas de figure :

Code :
  1. Si je tape :
  2. http://adfi.dyndns.org/accueil.html
  3. j'ai ceci qui apparait :
  4. http://www.adfi.info/index.php?id= [...] fo/accueil


 

Code :
  1. Alors que si j'ai :
  2. http://adfi.info/accueil.html
  3. J'ai bien ceci :
  4. http://www.adfi.info/accueil.html


 

Code :
  1. De même, si je tape :
  2. http://adfi.info/index.php?id=accueil
  3. J'ai :
  4. http://www.adfi.info/index.php?id=accueil
  5. Au lieu de :
  6. http://www.adfi.info/accueil.html


 
Voici le contenu de mon .htaccess :

Code :
  1. RewriteBase /
  2. RewriteRule adfi.dyndns.org www.adfi.info [R=301,L]
  3. RewriteRule ^(.*).html$ /index.php?id=$1  [L]
  4. RewriteRule ^adfi.info/(.*)$ www.adfi.info/$1 [R=301,L]


 
Y aurait-il une âme charitable pour m'aider, car j'ai du mal à avancer (c'est obscure l'url rewriting)
 
Merci


Message édité par bagu le 18-03-2008 à 12:08:28
Reply

Marsh Posté le 18-03-2008 à 12:07:19   

Reply

Marsh Posté le 18-03-2008 à 13:54:46    

Oublie pas de mettre un [QSA] dans la dernière RewriteRule pour que les paramètres soit ajoutés

Reply

Marsh Posté le 18-03-2008 à 13:55:59    

Et surtout pas de R=301, parce que sinon l'url avec le paramètre sera affiché dans le navigateur. C'est seulement en interne que tu dois cibler index.php?id=machin, pas côté navigateur

Reply

Marsh Posté le 18-03-2008 à 14:47:47    

J'ai modifié comme cela :  
 

Code :
  1. RewriteBase /
  2. RewriteRule ^(.*).html$ index.php?id=$1
  3. RewriteRule ^(.*)index.php?id=(.*)$ http://www.adfi.info/$1.html [R=301]
  4. RewriteCond %{HTTP_HOST} ^adfi.dyndns.org$
  5. RewriteRule ^(.*)$ http://www.adfi.info/$1 [R=301,L]
  6. RewriteCond %{HTTP_HOST} ^adfi.info$
  7. RewriteRule ^(.*)$ http://www.adfi.info/$1 [R=301,L]


 
Cela réponds à tout les critères, sauf un...
La ligne RewriteRule ^(.*)index.php?id=(.*)$ http://www.adfi.info/$1.html [R=301] ne semble pas correcte ou pas interprètée...
 
Mon idée est la suivante :
J'indique que http://hote/truc.html = http://hote/index.php?id=truc (cela marche actuellement)
Si l'utilisateur tape http://hote/index.php?id=truc il faut réécrire cela en http://hote/truc.html (cela ne marche pas)
Une fois ces deux critères remplis, je teste l'hôte afin de le corriger au besoin de la manière suivante :
Si l'utilisateur écrit http://bidule.com , je réécris cela afin d'avoir http://www.bidule.com...Tout en conservant les paramètres qui suivent et qui, après les traitement précédent, doivent être de forme truc.html (ça semble marcher aussi)
Si l'utilisateur écrit http://bidule.dyndns.org , je réécris cela afin d'avoir http://www.bidule.com...Tout en conservant les paramètres qui suivent et qui, après les traitement précédent, doivent être de forme truc.html (ça semble marcher aussi)
 
Du coup, je n'ai pas compris pourquoi mettre QSA ni pourquoi supprimer R=301...Car je souhaite indiquer à google (entre autre) que le lien http://adfi.dyndns.org n'existe plus.
 
Merci

Reply

Marsh Posté le 18-03-2008 à 15:03:04    

bagu a écrit :

La ligne RewriteRule ^(.*)index.php?id=(.*)$ http://www.adfi.info/$1.html [R=301] ne semble pas correcte ou pas interprètée...


Il est impossible de matcher la query string (donc ce qui est après le ?). Cette ligne ne peut pas fonctionner.  
 

bagu a écrit :

Si l'utilisateur tape http://hote/index.php?id=truc il faut réécrire cela en http://hote/truc.html (cela ne marche pas)


Ah ben voilà le problème : ce que tu veux faire est impossible, mod_rewrite ne sert pas à ça (ça risque en plus de devenir trop complexe)

Reply

Marsh Posté le 18-03-2008 à 16:14:27    

Merci à toi pour tes réponses...
 
Je vais donc faire sans...En espérant qu'une version hypothétique du mod rewrite puisse le faire un jour futur.
 
Même si je trouve quand même vachement frustrant le fait que quand je tape :
http://adfi.dyndns.org/prestations.html
 
cela se transforme en :
http://www.adfi.info/index.php?id=prestations
 
Et non en :
http://www.adfi.info/prestations.html
 
Ha ben en fait, le problème que je vient d'évoquer est résolu par :

Code :
  1. RewriteBase /
  2. RewriteCond %{HTTP_HOST} ^adfi.dyndns.org$
  3. RewriteRule ^(.*)$ http://www.adfi.info/$1 [R=301,L]
  4. RewriteCond %{HTTP_HOST} ^adfi.info$
  5. RewriteRule ^(.*)$ http://www.adfi.info/$1 [R=301,L]
  6. RewriteRule ^(.*).html$ index.php?id=$1


Message édité par bagu le 18-03-2008 à 16:21:25
Reply

Marsh Posté le 18-03-2008 à 16:41:49    

Ouais le problème c'est que tu faisais une redirection après le RewriteRule, alors qu'il ne faut pas :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed