escape le ? dans le Rewrite

Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics


Photoshop user
WRInaute passionné
WRInaute passionné
 
Messages: 1040
Inscription: 8 Déc 2004

escape le ? dans le Rewrite

Message le Dim Avr 15, 2007 12:53

Bonjour,

j'essaye de faire un simple redirection de :

-http://fastuff.info/blog/?2005/10/20/6-microsoft-annonce-des-licences-libres

vers

-http://blog.pixgarden.com/2005/10/20/6-microsoft-annonce-des-licences-libres

Avec ceci

Code: Tout sélectionner
RewriteRule ^/?(.*)$ http://blog.pixgarden.com/$1 [R=301]



Mais la redirection se fait vers :

-http://blog.pixgarden.com/?2005/10/20/6-microsoft-annonce-des-licences-libres

Je pense que le "?" n'est pas interprété comme un caractère classique, je me demande donc comment l'"escaper" ?

Merci


Photoshop user
WRInaute passionné
WRInaute passionné
 
Messages: 1040
Inscription: 8 Déc 2004

Message le Dim Avr 15, 2007 14:25

Semblerait que c'est \
mais que ca marche pas avec le ?

\
escapes special characters ( ^ $ ! . * | )


http://perishablepress.com/press/2006/0 ... ss-tricks/


Remi L.
WRInaute passionné
WRInaute passionné
 
Messages: 1063
Inscription: 6 Sep 2003

Message le Dim Avr 15, 2007 14:48

Cela ne marche pas avec le ? parce que tu ne peux pas mettre de Query String dans le premier paramètre.

L'UR est souvent utilisé pour supprimer les Query String pas pour en rajouter... ;-)
Il y a des chances que tu raisonnes à l'envers...

Si c'est vraiment dans ce sens que tu veux opérer, il faut que tu isoles la Query String dans une ligne RewriteCond.


Photoshop user
WRInaute passionné
WRInaute passionné
 
Messages: 1040
Inscription: 8 Déc 2004

Message le Dim Avr 15, 2007 14:56

Je ne pense pas résonner à l'envers.

Je veux désindéxé fastuff, dotClear sans UR et donner son poid à pixgarden dotClear avec UR.

Je fait une redirection 301 des url non R vers celles R. Cette redirection est faite avec RewriteRule mais ce n'est pas du masquage d'url. Et c'est bien du coté du ndd fastuff qu'il y a un "?"

Non ? Je suis à l'ouest ?


Serious
WRInaute passionné
WRInaute passionné
 
Messages: 2438
Inscription: 21 Nov 2005

Message le Dim Avr 15, 2007 15:15

L'echappement marche avec le point d'interrogation. \?
? est le singulier de *


Photoshop user
WRInaute passionné
WRInaute passionné
 
Messages: 1040
Inscription: 8 Déc 2004

Message le Dim Avr 15, 2007 15:31

Merci Serious

Code: Tout sélectionner
Options +FollowSymlinks
RewriteEngine  on

RewriteRule ^/\?(.*)$ http://blog.pixgarden.com/$1 [R=301]


J'ai mis ça donc et ca ne fait plus de redirection du tout...


Remi L.
WRInaute passionné
WRInaute passionné
 
Messages: 1063
Inscription: 6 Sep 2003

Message le Dim Avr 15, 2007 17:03

C'est qu'il ne m'a pas cru... :P
"Tu ne peux pas avoir de Query String dans le premier paramètre d'une RewriteRule"

Si tu veux récupérer une Query String il faut faire un truc du genre

Code: Tout sélectionner
RewriteCond %{QUERY_STRING} (.+)
   RewriteRule index\.php   %1


La règle ci-dessus va faire que quand on demandera
www.example.com/?toto
le serveur ira lire
www.example.com/toto

Voilà, si c'est un truc comme cela que tu veux faire, il te suffit de broder... :wink:


Photoshop user
WRInaute passionné
WRInaute passionné
 
Messages: 1040
Inscription: 8 Déc 2004

Message le Dim Avr 15, 2007 17:18

Remi L. a écrit:[...]


Désolé t'avais raison. Merci Rémi :D

mon code qui fonctionne :

Code: Tout sélectionner
RewriteCond %{QUERY_STRING} (.+)
RewriteRule index\.php   http://blog.pixgarden.com/%1 [R=301]

gringo
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 20
Inscription: 12 Mar 2007

Message le Dim Avr 15, 2007 20:26

Salut,

Voici l'URL que j'obtiens avec Firefox:

http:// blog.pixgarden.com/2005/10/20/6-microsoft-annonce-des-licences-libres?2005/10/20/6-microsoft-annonce-des-licences-libres

Est-ce normal?


Photoshop user
WRInaute passionné
WRInaute passionné
 
Messages: 1040
Inscription: 8 Déc 2004

Message le Lun Avr 16, 2007 17:09

Heu non pas normal, faut que je regarde ça pff

Warshadow
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 5
Inscription: 16 Mar 2009

Re: escape le ? dans le Rewrite

Message le Ven Juil 24, 2009 14:22

Bonjour M'sieurs Dames !

Tout d'abord, je m'excuse de remonter un sujet de 2004, mais c'est manifestement toujours d'actualité, en tout cas pour moi...

J'ai besoin de votre aide... Je cherche à faire la même chose que Photoshop user, c'est-à-dire rediriger une adresse de la forme /index.php?param vers /param, tout ceci dans un but de rétro-compatibilité des urls, et surtout afin d'éviter du duplicate content. (Pour savoir comment j'en suis arrivé là, j'ai tout simplement modifié les urls de mon blog, auparavant en /index.php?post/... pour des adresses en /post/... Sauf que du coup mes billets sont accessibles via deux adresses, dont une majorité déjà indexées par Google).

Bref, voici le htaccess de test que j'ai actuellement :

Code: Tout sélectionner
RewriteEngine on

# redirect older addresses with index.php
RewriteCond %{QUERY_STRING} (.+)
RewriteRule ^index\.php$ http://localhost/labs/htaccess/%1 [R=301,L]

# rewrite to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?$1 [L]


Problème : la partie QUERY_STRING est réécrite à la suite de l'adresse. Donc, si je tapes par exemple /index.php?param j'obtiens /param?param... Et accessoirement une boucle infinie de redirection !

Je ne comprends pas du tout pourquoi ça fait ça, en théorie le QUERY_STRING est ajouté uniquement si on précise le flag QSA, non ?

Note : le fait qu'on ne puisse pas échapper le caractère ? empêche a priori toute solution basés sur un simple RewriteRule.

Merci d'avance de votre aide, ça fait trois heures que je suis dessus et je commence légèrement à craquer là ! :mrgreen:


Photoshop user
WRInaute passionné
WRInaute passionné
 
Messages: 1040
Inscription: 8 Déc 2004

Re: escape le ? dans le Rewrite

Message le Ven Juil 24, 2009 14:34

Si mes souvenirs sont bon, j'avais abandonnée... Bonne chance Warshadow

Warshadow
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 5
Inscription: 16 Mar 2009

Re: escape le ? dans le Rewrite

Message le Ven Juil 24, 2009 15:15

Du nouveau grâce à un ami : en ajoutant ? à la fin de l'url de redirection, ça retire la query_string !

Mon .htaccess devient donc :

RewriteEngine on

# redirect older addresses with index.php
RewriteCond %{QUERY_STRING} (.+)
RewriteRule ^index\.php$ http://localhost/labs/htaccess/%1? [R=301,L]

# rewrite to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?$1 [L]


Seulement, j'ai encore une boucle infinie avec la 2e Rule... :/ Any idea ?

EDIT : Il me semblait que l'url n'était réinterprétée par le htaccess que si on faisait une redirection avec [R], ce qui n'est manifestement pas le cas, pouvez-vous confirmer ? Et si tel est le cas, comment faire pour que ceci marche ?

Warshadow
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 5
Inscription: 16 Mar 2009

Re: escape le ? dans le Rewrite

Message le Ven Juil 24, 2009 17:10

Problème finalement résolu en PHP. Au moins j'ai augmenté mes skills en .htaccess ! \o/


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités