escape le ? dans le Rewrite

WRInaute impliqué
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:
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
 
WRInaute impliqué
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.
 
WRInaute impliqué
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 ?
 
WRInaute impliqué
Merci Serious

Code:
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...
 
WRInaute impliqué
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:
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:
 
Nouveau WRInaute
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?
 
Nouveau WRInaute
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:
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:
 
Nouveau WRInaute
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 ?
 
Nouveau WRInaute
On peut s'en sortir sans passer par PHP, je viens de galérer une heure avant d'enfin trouver la solution :idea:

https://simonecarletti.com/blog/2009/01/apache-rewriterule-and-query-string/

Dans mon cas ca donne genre ceci:

RewriteCond %{QUERY_STRING} ^cat=([a-z-]*)$
RewriteRule ^cours\.php$ %1? [R,L]

Est-ce que quelqu'un pourrait confirmer que si on ne procède pas de la sorte, et que donc on laisse une meme page a la fois accessible via par exemple cours.php?cat=arithmetique et par /arithmetique/ on perd en efficacité SEO vu que le contenu sera dupliqué ?

Le comble serait qu'au final tout ceci ne serve à rien :mrgreen:
 
Discussions similaires
Haut