Réécrire des URL avec un p... de point d'interrogation ?

WRInaute accro
Bonjour

Je cherche à réécrire des URL du type www.monsite.com/?2010/12/08/123-ici-mon-sujet en www.monsite.com/ici-mon-sujet

J'ai donc essayé ceci :
Code:
RewriteRule ^[?]([0-9]+)[/]([0-9]+)[/]([0-9]+)[/][0-9]+-(.+)$ /$4 [R=301,NC,L]

Mais ça ne fonctionne pas :cry: car apparemment il "prend" ce qu'il y a derrière le point d'interrogation comme des paramètres d'URL (ce qui n'est pas faux) : en clair, j'y arrive pô !

En fait je bloque sur l'interprétation du point d'interrogation. Je suis certain que c'est simple ! J'aimerais juste éviter de devoir réécrire à la mano mes 437 URL, plus toutes les autres (plus d'un millier au total je pense :roll: )

(ndlr : refonte de blog suite passage de Dotclear à Wordpress)
 
WRInaute passionné
Il faut Mettre un anti-slash devant ton "?" pour signaler que tu parles du caractère uniquement et non du caractère de commande exactement que tu le fait pour les autres caractères de commande comme le "." par exemple :wink:
 
WRInaute accro
Marche pô

J'ai essayé ça :
Code:
RewriteRule ^\?([0-9]+)[/]([0-9]+)[/]([0-9]+)[/][0-9]+-(.+)$ /$4 [QSA,R=301,NC,L]

Mais macache !

Ça va se terminer avec une gestion... en PHP dans le header.php de mon thème :twisted: car je vais pas y passer ma journée !
 
WRInaute accro
Bon apparemment il faut que j'utilise un rewritecond sur la querystring... Mais je vois pas la syntaxe : c'est dingue, je n'ai trouvé AUCUN exemple sur le web pour mon cas de figure !

Ça fait plus d'une heure que je recherche :cry:

Vais tenter la soluce "brutale" : redirection via le header en PHP ! Nan mais...
 
WRInaute accro
Ta problématique m'intéresse je suis en plein dedans. Tu as pu conserver les id des post de DC lors de l'import dans WP ? ET retrouver le même masque d'url ?
 
WRInaute accro
Marche pô


Au niveau de la migration, impossible de garder les ID des posts... Perso j'ai conservé les link_rewrite (uniques), donc je vais m'en passer. J'hésite quand même à établir carrément une liste de réécritures "en dur" !

Sinon je viens d'essayer sur les tags, ma méthode fonctionne parfaitement (je passe de "/?tag/toto" à "/tag/toto" en 301)

Je vois la suite après le déjeuner !
 
WRInaute accro
De toutes façons, dans mon cas je shoote le dossier que j'avais dans l'url (à l'époque je n'avais pas compris comment installer DC à la racine), donc quoi qui se passe toutes mes url vont changer. Va juste falloir que je me fasse un script de redirection aux petits oignons dans ce fameux dossier, pour être sûr de ne générer aucune 404.
 
WRInaute impliqué
Je confirme la méthode de Blount, c'est bien "RewriteCond %{QUERY_STRING}" qu'il faut utiliser dans ton cas..

Attention tout de même à utiliser %1 à la place du $1 habituel pour utiliser les termes provenant de le ligne RewriteCond ;)
 
WRInaute accro
Cela me redirige vers la racine du site...

J'ai très exactement utilisé :
Code:
RewriteCond %{QUERY_STRING} [0-9]+/[0-9]+/[0-9]+/[0-9]+-(.+)$
RewriteRule .* /%5? [R=301,L,NC]

(c'est le 5ème paramètre que je veux conserver...)

Finalement je vais tout gérer via le header.php, c'est plus simple :) (mais bon j'aurais aimé "savoir faire" !)
 
WRInaute impliqué
Cela n'a strictement rien de plus simple qu'en PHP, c'est plus un problème de compréhension qu'un problème de simplicité.

Le chiffre après le signe "%" correspond au paramètre par rapport aux parenthèses capturantes.
Dans le RewriteCond, tu n'as qu'une seule parenthèse qui capture. Donc, c'est bien %1 qu'il faut mettre. Comme %5 est vide, il redirige vers la racine, normal.

Si je t'ai dis que cela fonctionnait, c'est que j'ai testé.
www.monsite.com/?2010/12/08/123-ici-mon-sujet est bien réécrit en www.monsite.com/ici-mon-sujet.

Donc, si mon code ne fonctionne pas, c'est que c'est autre chose, et seule la liste complète de tes réécritures nous aidera.
 
Discussions similaires
Haut