[résolu] 301 pour des anciennes url non rewritées

WRInaute discret
Bonjour,

j'ai actuellement des urls qui sont de la forme page.php?p=aa_valeur

Je prépare une nouvelle version de mon site avec des url toutes rewritées. Je n'ai pas de problème réécrire les nouvelles urls.
Mais je voudrais tout de même ne pas perdre le référencement des anciennes url en les redirigeant avec une 301 vers les nouvelles.

Donc en fait je veux écrire des règles du style
Code:
page.php?p=aa_valeur -> /aa/valeur.html

J'ai écrit des trucs du genre
Code:
RewriteRule ^/page.php\?p=aa_(.*) /aa/$1.html [R=301]

Mais je n'ai aucun résultat. J'ai l'impression que les paramètres de la query string posent problème.

Est ce que vous auriez une solution ?

Merci
 
WRInaute impliqué
Le problème c´est que tu ne peux pas faire une boucle:
url 1 -> url 2
url2 -> url 1
= marche pas
 
WRInaute discret
Mais justement ce n'est pas une boucle puisque les nouvelles urls sont différentes. Sinon effectivement, d'une part cela ne fonctionnerait pas, d'autre part, ça ne servirait à rien.

Ce que je veux faire, c'est plutôt un schéma du genre
url1->url2
url2->url3

avec
url1 = page.php?p=aa_valeur (les pages indexées actuellement)
url2 = /aa/valeur.html (les nouvelles urls réécrites)
url3 = nouvellepage.php?param1=aa&param2=valeur (les urls comprises par mon prog)

D'autres idées ?
 
WRInaute impliqué
url1 = page.php?p=aa_valeur (les pages indexées actuellement)
url2 = /aa/valeur.html (les nouvelles urls réécrites)

Alors il faut:

RewriteCond %{QUERY_STRING} p=aa_([^&]+)
RewriteRule ^page.php$ /aa/%1.html [R=301]

a mettre avant la regle qui gere url2 -> url3
 
WRInaute discret
Ah merci, je ne connaissais pas le RewriteCond avec le QueryString.

Je pense que c'est exactement ce qu'il me faut et je crois que ça m'ouvre de nouvelles possibilités !

Merci merci ^^
 
WRInaute discret
Bon, les redirections fonctionnent très bien désormais.

Le seul petit hic, c'est qu'après la redirection :

RewriteCond %{QUERY_STRING} p=aa_([^&]+)
RewriteRule ^page.php$ /aa/%1.html [R=301]

les urls sont de la forme :

/aa/%1.html?querystring

Et évidemment je voudrais bien ne pas avoir cette querystring à la fin. Est ce qu'il y a une solution ?
 
Nouveau WRInaute
Bonjour, ce problème m'interesse, car j'ai effectué les meme manipulation, et la query string se rajoute a la fin, voici mes règles :


RewriteRule ^scripts/agenda.php?tout_le_mois=1$ http://www.domaine.com/agenda.1.php [R=301,L]


J'ai essayé ceci après, mais ça n'a pas l'air de fonctionner...
RewriteRule ^agenda.1.php?tout_le_mois=1$ agenda.1.php [L]
 
WRInaute discret
Bon, après quelques tests, j'ai trouvé un trick pour qu'il ne remette pas la QS à la fin.

Ma règle est donc
RewriteCond %{QUERY_STRING} p=aa_([^&]+)
RewriteRule ^page.php$ /aa/%1.html? [R=301]

La seule modif c'est le ? juste après le .html
J'ai l'impression qu'avec cela il se dit qu'il y a déjà une QS collée et donc il ne met pas la précédente. En mettant QSA, il ajoute la QS.
Et cela fonctionne aussi en mettant ?toto ou n'importe quelle QS. Mais en ne mettant qu'un ? il fait comme s'il n'y avait rien.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut