invader-u Posté 25 Mars 2006 Posté 25 Mars 2006 (modifié) Bonjour, Ma regle se trouve dans un .htaccess dans le repertoire MONREP J'ai 2 questions : 1) Je voudrais rediriger de maniere transprente une requete vers une requete avec une variable en plus. J'ai ecrit cette regle, mais qui semble jamais etre suivie, car $var2 est toujours vide quand je le recupere dans le script index.php RewriteRule ^index.php?var1=([0-9]+) index.php?var1=$1&var2=original [L,QSA] Ma requete est du genre : http://www.MONDOMAIN.com/MONREP/index.php?var1=456 2) Parfois la requete n'est pas comme ci dessous, mais comme ca : http://www.MONDOMAIN.com/MONREP/?var1=456 et je voudrais rediriger vers index.php?var1=$1&var2=original Quelle est la regle a mettre ? Je vous remercie par avance pour l'aide que vous m'aporterez. Modifié 25 Mars 2006 par invader-u
Dan Posté 26 Mars 2006 Posté 26 Mars 2006 Tu ne peux pas mettre la QUERY_STRING dans la règle, parce que dans ce cas elle n'est pas reconnue. Il faut mettre une condition, se basant sur la %{QUERY_STRING}, mais pour éviter de boucler à l'infini, il faut aussi s'assurer que cette %{QUERY_STRING} ne contient pas "var2" et dans ce cas ne rien faire. Donc par exemple: RewriteCond %{QUERY_STRING} !var2RewriteCond %{QUERY_STRING} var1RewriteRule index\.php index.php?var2=original [QSA,L] Cela dit que si la %{QUERY_STRING} ne contient pas var2 ET qu'elle contient var1, on rajoute une variable "var2=original" ainsi que les variables qui étaient transmises, grâce au flag [QSA] Note: Lors de l'utilisation de 2 ou plusieurs RewriteCond, celles-ci sont liées par un "ET Logique". Si on veut inverser cela et avoir un "OU Logique" il faut mettre [OR] en fin de RewriteCond Dan
invader-u Posté 26 Mars 2006 Auteur Posté 26 Mars 2006 (modifié) Tout d'abord je te remercie, car comme a ton habitude, c'est tres bien repondu. Mais cela m'amene a te poser une autre question. Mon probleme est le suivant : Je veux rediriger uniquement index.php?vara=([0-9]+) index.php?vara=([0-9]+)&varb=([0-9]+) Mais pas : index.php?vara=([0-9]+)&var_ni_an_ib_1=([0-9]+)&var_ni_an_ib_2=([0-9]+) ... idem avec vara et varb index.php?vara=([0-9]+)&varb=([0-9]+)&var_ni_an_ib_1=([0-9]+)&var_ni_an_ib_2=([0-9]+) ... en gros je veux rediriger si et seulement si ca contient uniquement vara ou (vara et varb) Merci par avance Tu ne peux pas mettre la QUERY_STRING dans la règle, parce que dans ce cas elle n'est pas reconnue. Il faut mettre une condition, se basant sur la %{QUERY_STRING}, mais pour éviter de boucler à l'infini, il faut aussi s'assurer que cette %{QUERY_STRING} ne contient pas "var2" et dans ce cas ne rien faire. Donc par exemple: RewriteCond %{QUERY_STRING} !var2RewriteCond %{QUERY_STRING} var1RewriteRule index\.php index.php?var2=original [QSA,L] Cela dit que si la %{QUERY_STRING} ne contient pas var2 ET qu'elle contient var1, on rajoute une variable "var2=original" ainsi que les variables qui étaient transmises, grâce au flag [QSA] Note: Lors de l'utilisation de 2 ou plusieurs RewriteCond, celles-ci sont liées par un "ET Logique". Si on veut inverser cela et avoir un "OU Logique" il faut mettre [OR] en fin de RewriteCond Dan <{POST_SNAPBACK}> Modifié 26 Mars 2006 par invader-u
invader-u Posté 26 Mars 2006 Auteur Posté 26 Mars 2006 (modifié) Je vais essayer de prendre un exemple plus clair : Je veux rediriger ces 2 regles en y ajoutant une variable. http://www.webmaster-hub.com/index.php?showtopic=22954http://www.webmaster-hub.com/index.php?showtopic=22954&st=90 Comme cela http://www.webmaster-hub.com/index.php?showtopic=22954&varajoutee=valhttp://www.webmaster-hub.com/index.php?showtopic=22954&st=90&varajoutee=val Mais par contre je veux pas que ca ajoute cette nouvelle variable si elle est deja ajoutee ou si l'url contient d'autres variables. Dans mon exemple, je veux pas que ca ajoute si l'url est de ce type : http://www.webmaster-hub.com/index.php?showtopic=22954&view=getlastposthttp://www.webmaster-hub.com/index.php?showtopic=22954&pid=457390&st=300entry457390 (normalement identique a la suivantecar l'ancre n'est pas transmise)http://www.webmaster-hub.com/index.php?showtopic=22954&pid=457390&st=300&http://www.webmaster-hub.com/index.php?showtopic=22954&view=getnewposthttp://www.webmaster-hub.com/index.php?showtopic=22954&hl=blouclagehttp://www.webmaster-hub.com/index.php?showtopic=22954&varajoutee=valhttp://www.webmaster-hub.com/index.php?showtopic=22954&st=90&varajoutee=val Je peux faire comme tu dis mais je me demande si il y a pas plus simple et en plus si j'oublie une variable a exclure ca sera pas top : RewriteCond %{QUERY_STRING} !viewRewriteCond %{QUERY_STRING} !pidRewriteCond %{QUERY_STRING} !hlRewriteCond %{QUERY_STRING} !varajouteeRewriteCond %{QUERY_STRING} showtopicRewriteRule index\.php index.php?varajoutee=val[QSA,L] Merci par avance pour vos conseils EDITION 1 En plus ca ne semble pas fonctionne. J'ai mis ca comme regle dans le .htaccess de mon repertoire forum : RewriteCond %{QUERY_STRING} !gopidRewriteCond %{QUERY_STRING} !showforumRewriteCond %{QUERY_STRING} !viewRewriteCond %{QUERY_STRING} !pidRewriteCond %{QUERY_STRING} !hlRewriteCond %{QUERY_STRING} !varajouteeRewriteCond %{QUERY_STRING} showtopicRewriteRule index\.php index.php?rfurl=original[QSA,L] et dans le fichier inddex.php, j'ecris des traces dans un fichier : ce qui me donne : showtopic --> 4110hl --> texterechercherequest_method --> getURL entree : /forum/index.php?showtopic=4110&hl=texterechercheaussi_low_act -->act --> stfurlindex -->t --> 4110f --> 3 alors que sur une de mes autres regles simple de redirection, j'ai comme trace : showforum --> 19rfurl --> newURL entree : /forum/messages-conserver,f19.htmaussirequest_method --> get_low_act -->act --> sffurlindex --> 1f --> 19 EDITION n2 : RewriteRule ^([-a-z0-9\.]*),t([0-9]*).htm index.php?showtopic=$2&titlefriendly=$1&rfurl=new [L,QSA] Cette regle qui est placee au debut du .htaccess redirige vers la page d'acceuil du forum si j'ai aussi cette regle (en fin de fichier) RewriteCond %{QUERY_STRING} !gopidRewriteCond %{QUERY_STRING} !showforumRewriteCond %{QUERY_STRING} !viewRewriteCond %{QUERY_STRING} !pidRewriteCond %{QUERY_STRING} !hlRewriteCond %{QUERY_STRING} !varajouteeRewriteCond %{QUERY_STRING} showtopicRewriteRule index\.php index.php?rfurl=original[QSA,L] Si je commente la grosse regle ci dessus, la regle precedente fonctionne bien Modifié 26 Mars 2006 par invader-u
invader-u Posté 27 Mars 2006 Auteur Posté 27 Mars 2006 (modifié) Salut, 1) j'ai interdit la presence de la variable que j'ajoute pour eviter le bouclage (j'avais fait une erreur 2) J'ai reorganise le tout pour optimizer l'execution (sortir plus vite) 3) je me suis apercu que ca s'appliquait aussi aux sous-repertoires, donc j'ai ajoute 2 ligne qui excluent le sous repertoire lofiversion (mais seule la ligne 2 est utile !) 4) J'ai ajoter l'argument R pour que la redirection soit visible RewriteCond %{PATH_INFO} !lofiversion RewriteCond %{REQUEST_URI} !lofiversion RewriteCond %{QUERY_STRING} showtopic RewriteCond %{QUERY_STRING} !rfurl RewriteCond %{QUERY_STRING} !view RewriteCond %{QUERY_STRING} !gopid RewriteCond %{QUERY_STRING} !showforum RewriteCond %{QUERY_STRING} !pid RewriteCond %{QUERY_STRING} !hl RewriteRule index\.php index.php?rfurl=original[QSA,L,R] Le probleme, c'est que cette regles est bien lu, il passe toutes les clauses "RewriteCond" Mais c'est au moment d'executer la "RewriteRule", qu'il estime que c'est la meme URL et donc il ignore la regle ! Et donc je suis redirige vers le fichier index.php du forum sans passage de variable (page d'acceuil du forum) Ci dessous les traces completes du rewriting dans le fichier de log. 559575:MY-IP - - [27/Mar/2006:02:31:43 --0600] [www.my-domain.com/sid#a067028][rid#a296fc8/initial] (3) [per-dir /home/my-domain/public_html/forum/] applying pattern 'index\.php' to uri 'index.php'559576:MY-IP - - [27/Mar/2006:02:31:43 --0600] [www.my-domain.com/sid#a067028][rid#a296fc8/initial] (4) RewriteCond: input='' pattern='!lofiversion' => matched 559577:MY-IP - - [27/Mar/2006:02:31:43 --0600] [www.my-domain.com/sid#a067028][rid#a296fc8/initial] (4) RewriteCond: input='/forum/index.php' pattern='!lofiversion' => matched 559578:MY-IP - - [27/Mar/2006:02:31:43 --0600] [www.my-domain.com/sid#a067028][rid#a296fc8/initial] (4) RewriteCond: input='showtopic=61095' pattern='showtopic' => matched 559579:MY-IP - - [27/Mar/2006:02:31:43 --0600] [www.my-domain.com/sid#a067028][rid#a296fc8/initial] (4) RewriteCond: input='showtopic=61095' pattern='!rfurl' => matched 559580:MY-IP - - [27/Mar/2006:02:31:43 --0600] [www.my-domain.com/sid#a067028][rid#a296fc8/initial] (4) RewriteCond: input='showtopic=61095' pattern='!view' => matched 559581:MY-IP - - [27/Mar/2006:02:31:43 --0600] [www.my-domain.com/sid#a067028][rid#a296fc8/initial] (4) RewriteCond: input='showtopic=61095' pattern='!gopid' => matched 559582:MY-IP - - [27/Mar/2006:02:31:43 --0600] [www.my-domain.com/sid#a067028][rid#a296fc8/initial] (4) RewriteCond: input='showtopic=61095' pattern='!showforum' => matched 559583:MY-IP - - [27/Mar/2006:02:31:43 --0600] [www.my-domain.com/sid#a067028][rid#a296fc8/initial] (4) RewriteCond: input='showtopic=61095' pattern='!pid' => matched 559584:MY-IP - - [27/Mar/2006:02:31:43 --0600] [www.my-domain.com/sid#a067028][rid#a296fc8/initial] (4) RewriteCond: input='showtopic=61095' pattern='!hl' => matched 559585:MY-IP - - [27/Mar/2006:02:31:43 --0600] [www.my-domain.com/sid#a067028][rid#a296fc8/initial] (2) [per-dir /home/my-domain/public_html/forum/] rewrite index.php -> index.php?rfurl=original[QSA,L,R] 559586:MY-IP - - [27/Mar/2006:02:31:43 --0600] [www.my-domain.com/sid#a067028][rid#a296fc8/initial] (3) split uri=index.php?rfurl=original[QSA,L,R] -> uri=index.php, args=rfurl=original[QSA,L,R] 559587:MY-IP - - [27/Mar/2006:02:31:43 --0600] [www.my-domain.com/sid#a067028][rid#a296fc8/initial] (3) [per-dir /home/my-domain/public_html/forum/] add per-dir prefix: index.php -> /home/my-domain/public_html/forum/index.php 559588:MY-IP - - [27/Mar/2006:02:31:43 --0600] [www.my-domain.com/sid#a067028][rid#a296fc8/initial] (1) [per-dir /home/my-domain/public_html/forum/] initial URL equal rewritten URL: /home/my-domain/public_html/forum/index.php [iGNORING REWRITE] Une idee ? Modifié 27 Mars 2006 par invader-u
invader-u Posté 27 Mars 2006 Auteur Posté 27 Mars 2006 Daaaaaaaaaaaaaaaaaaaaaan au secouuuuuuuuuuuuuuuuurs ;-) Je cherche, mais rien ne fonctionne et je trouve aucune info nullepart à ce sujet
Dudu Posté 28 Mars 2006 Posté 28 Mars 2006 Bonjour 3) je me suis apercu que ca s'appliquait aussi aux sous-repertoires, donc j'ai ajoute 2 ligne qui excluent le sous repertoire lofiversion (mais seule la ligne 2 est utile !) RewriteCond %{PATH_INFO} !lofiversion RewriteCond %{REQUEST_URI} !lofiversion Il y a plus simple: annuler depuis ce répertoire les effets du .htaccess placé à un niveau supérieur. À mettre dans un .htaccess dans le dossier lofiversion RewriteEngine off (ça ne marche pas pour les répertoires virtuels, mais il me semble que ce n'est pas le cas de "lofiversion" sur IPB) Pour le reste, je ne saurais pas te répondre: ça dépasse largement mes connaissances. Désolé
invader-u Posté 28 Mars 2006 Auteur Posté 28 Mars 2006 Bonjour Il y a plus simple: annuler depuis ce répertoire les effets du .htaccess placé à un niveau supérieur. À mettre dans un .htaccess dans le dossier lofiversion RewriteEngine off (ça ne marche pas pour les répertoires virtuels, mais il me semble que ce n'est pas le cas de "lofiversion" sur IPB) Pour le reste, je ne saurais pas te répondre: ça dépasse largement mes connaissances. Désolé <{POST_SNAPBACK}> Je te remercie de ton aide. Je pense avoit trouve la solution a mon probleme, mais il faut que je teste. La nuit portant conseil, j'ai pense a un truc pendant que je dormais. Si ca marche, je poste ici.
invader-u Posté 28 Mars 2006 Auteur Posté 28 Mars 2006 Re ;-) J'ai modifie ma regle pour qu'elle s'applique au phpinfo.php et pas index.php Bon il y avait 2 problemes : 1) Comme je suis un idiot, j'avais pas vu qu'il manquait un espace entre "original" et "[QSA,L,R]" . 2) Une fois regle ce probleme, je me suis apercu que QSA entrainait une erreur : http://www.my-domain.com/forum/phpinfo.php...bbbbbbbbbbbbbbb J'etais redirige vers : http://www.my-domain.com/home/my-domain/public_html/forum/phpinfo.php?rfurl=original&showtopic=aaaaaaaaaaa&st=bbbbbbbbbbbbbbbbbb Donc j'ai ajoute un : Rewritebase /forum et depuis ca marche
invader-u Posté 28 Mars 2006 Auteur Posté 28 Mars 2006 (modifié) Il me reste un probleme. Ne vous focalisez pas sur la pseudo complexité de la condition, le probleme porte sur la RewriteRule. RewriteBase /forumRewriteCond %{QUERY_STRING} ^showtopic=([0-9]+)(&st=)?([0-9]*)(&)?(hl=)?$RewriteRule index\.php index.php?rfurl=original [QSA,L] Mon probleme est simple : Parfois le nom du fichier index.php est omis et donc la regle ne s'applique pas alors que je voudrais qu'elle s'applique. Sur cette URL, la regle s'applique http://www.my-domain.com/forum/index.php?showtopic=68578 Sur celle ci, elle ne s'applique pas http://www.my-domain.com/forum/?showtopic=68578 Pour info, j'ai optimise ma regle : anciene regle : RewriteBase /forumRewriteCond %{QUERY_STRING} showtopic=RewriteCond %{QUERY_STRING} !rfurl=RewriteCond %{QUERY_STRING} !view=RewriteCond %{QUERY_STRING} !gopid=RewriteCond %{QUERY_STRING} !pid=RewriteCond %{QUERY_STRING} !hl=RewriteCond %{QUERY_STRING} !mode=RewriteCond %{QUERY_STRING} !s=RewriteRule index\.php index.php?rfurl=original [QSA,L] Avec l'ancienne regle, si j'oubliais un argument c'etait le caca, avec la nouvelle c'est une verification tres stricte Modifié 28 Mars 2006 par invader-u
invader-u Posté 28 Mars 2006 Auteur Posté 28 Mars 2006 Bon je me reponds a moi meme, c'etait simple : RewriteBase /forum RewriteCond %{QUERY_STRING} ^showtopic=([0-9]+)(&st=)?([0-9]*)(&)?(hl=)?$ RewriteRule ^(index\.php)?$ index.php?rfurl=original [QSA,L]
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant