JeuWeb - Crée ton jeu par navigateur
[Résolu][.htaccess] Url rewriting et Redirection - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu][.htaccess] Url rewriting et Redirection (/showthread.php?tid=2825)



[Résolu][.htaccess] Url rewriting et Redirection - Eluox - 31-07-2008

Bonsoir a tous, me revoilà, avec mes problèmes en cartons toujours aussi Big Grin

J'vous explique, j'ai un .htaccess, ou je fait de l'url rewriting pour que ma page index.php soit index.html et pour que mes pages index.php?do=register soit register.html

Sa j'ai réussi, fin sa marche en tout cas Big Grin,

Code PHP :
<?php 
Options
+FollowSymlinks
RewriteEngine On

RewriteRule
^index.html$ /index.php
RewriteRule
([a-z]+)\.html$ /index.php?do=$1

Maintenant je me heurte a un autre problème, je voudrais que si une personne arrive sur mon domaine du genre monsite.com, il soit redirigé vers www.monsite.com, et si il tape monsite.com/test.html il soit redirigé vers www.monsite.com/test.html

J'ai donc cherché un peu partout, et j'ai trouvé ce bout de code :
Code PHP :
<?php 
RewriteCond
%{HTTP_HOST} ^monsite\.com [NC]
RewriteRule ^(.*)$ http://monsite.com$1 [QSA,R=301,L]

Sa marche tip top, si j'arrive sur monsite.com sa me redirige, mais, si je vais sur monsite.com/test.html, sa me redirige vers www.monsite.com/?index.php?do=test et non vers test.html comme je le voudrais.

Merci a ceux qui pourront m'aider ou en tout cas a ceux qui m'ont compris Big Grin

Cordialement,


RE: [ .HTACCESS] Url rewriting et Redirection - barst - 31-07-2008

Apparemment c'est ta première règle qui se déclenche et non ta deuxième.

le htaccess est parcouru dans un seul sens et quand il trouve une règle à appliquer il s'arrête à cette règle
Donc change l'ordre de tes règles, ça devrait marcher.


RE: [ .HTACCESS] Url rewriting et Redirection - z3d - 31-07-2008

@Barst > Non, le traitement ne s'arrête pas sur cette condition, pourquoi ?
Code PHP :
<?php 
Options
+FollowSymlinks
RewriteEngine On

RewriteRule
^index.html$ /index.php
RewriteRule
([a-z]+).html$ /index.php?do=$1
RewriteCond
%{HTTP_HOST} ^monsite.com [NC]
RewriteRule ^(.*)$ http://monsite.com$1 [QSA,R=301,L]

Voilà dans quel ordre se trouve les motifs, voilà comment cela se passe :
La requête : http://monsite.com/test.html
Apache catch : test.html
Et verifie selon les conditions dans l'ordre ou elles sont :
  • 1ere condition --> non valable
  • 2eme condition valable --> il applique le motif et continue son traitement
Pourquoi il continue sont traitement, tout simplement car la ligne auquel le motif se rattache n'a pas de directive [L] lui précisant que si ce motif s'applique alors on arrête le traitement.
Donc Apache continue le parsing des motifs et va jusqu'à celle qui contient le rajout de www qui elle arrete bien le traitement car contenant la directive [L].

@Eluox > il faut que tu ajoutes des paramètres a ton url ré-écrite pour qu'elle ne passe pas dans la seconde condition. Il faut analyser et structurer ses liens correctement, là en l'occurence, si tu veux que test.html ne correspondent pas a la condition sur lequel elle tombe tu dois modifier cette condition pour qu'elle s'applique uniquement aux pages qui ont besoin de l'index utilisant le parametre do, soit :
Code PHP :
<?php 
RewriteRule
do-([a-z]+).html$ /index.php?do=$1

http://monsite.com/do-test.html
http://monsite.com/test.html