web-dev-qa-db-fra.com

Directives de redirection 301 pour la migration de blogger vers wordpress

Bonjour, j'essaie de déplacer mon blog de Blogger vers WordPress et je souhaite conserver une structure d'URL simple et propre, telle que http://www.example.com/post-name/.

Dans blogger, j'ai la structure d'URL suivante:

  1. www.example.com/2017/02/post-name.html
  2. www.example.com/2017/02/post-name.html?m=1
  3. www.example.com/2017/02/post-name.html?m=0

Je peux rediriger toutes ces URL de Blogger vers une URL vierge sur WordPress avec la structure http://www.example.com/post-name/ à l'aide des plug-ins de redirection pour WordPress.

J'utilise l'expression de regex suivante

  • URL source: ^/\d{4}/\d{2}/(.*).html+.*
  • URL cible: http://www.example.com/$1/

La configuration ci-dessus a parfaitement fonctionné, mais je souhaite obtenir la même chose en utilisant les redirections côté serveur en modifiant le fichier .htaccess. Cet outil permet d'exporter la redirection au format .htaccess pour la mettre à jour sur le serveur. Mais cette règle de réécriture exportée ne fonctionne pas.

Voici la réécriture exportée à partir de plug-ins de redirection:

# Created by Redirection
<IfModule mod_rewrite.c>
RewriteRule ^\d{4}/\d{2}/(.*).html+.* http://www.example.com/$1/ [R=301,L]
</IfModule>
# End of Redirection

Que dois-je faire ou y at-il un problème avec mon expression pour le fichier .htaccess?

1
nasirs
 RewriteRule ^\d{4}/\d{2}/(.*).html+.* http://www.example.com/$1/ [R=301,L]

Cela semble indiquer que cela devrait "fonctionner", bien qu'il y ait quelques choses qui peuvent être rangées et que la chaîne de requête (c'est-à-dire m=1 ou m=0) restera sur l'URL.

Assurez-vous également que vous avez vidé le cache de votre navigateur avant de procéder au test, car les navigateurs 301 sont mis en mémoire cache par le navigateur. Pour cette raison, il peut être plus facile de tester avec les redirections 302 (temporaires) et de passer à un 301 uniquement lorsque vous êtes sûr que tout fonctionne correctement. (Conseil: testez avec l'inspecteur d'objets du navigateur ouvert et l'option "Désactiver le cache" cochée.)

Cette redirection doit également aller en haut de votre fichier .htaccess, avant le contrôleur frontal WordPress (c'est-à-dire. Avant la section # BEGIN WordPress).

Essayez plutôt ce qui suit:

RewriteRule ^\d{4}/\d{2}/(.+)\.html$ http://www.example.com/$1/? [R=301,L]

Le +.* final sur votre motif n'a pas beaucoup de sens (bien que cela ne devrait pas poser de problème), car il répète simplement la l (de html) une ou plusieurs fois, suivie de rien. Le .html est toujours la fin du chemin de l'URL (la chaîne de requête ne fait pas partie du chemin de l'URL), elle doit donc être suivie de $ (ancre de fin de chaîne).

Le ? à la fin de la RewriteRulesubstitution enlève efficacement la chaîne de requête de l'URL cible en créant une chaîne de requête "vide". Sinon, sur Apache 2.4+, vous pouvez utiliser l'indicateur QSD à la place (Query String Discard). c'est à dire. ... http://www.example.com/$1/ [QSD,R=301,L]

MISE À JOUR: Est-il sécuritaire d'utiliser ...

Eh bien, vous pourriez être plus spécifique avec l'expression régulière, afin de vous assurer qu'elle ne correspond pas trop à l'adresse "trop" et qu'elle ne correspond qu'aux URL qui vous intéressent. Par exemple, la directive ci-dessus correspondra également aux URL du formulaire: example.com/2017/02/foo/bar/post-name.html , ce qui entraînerait une redirection (éventuellement non valide) vers /foo/bar/post-name. Ou même example.com/2017/02/1111/22/post-name.html, ce qui entraînerait une double redirection. Cela peut ne pas avoir d'importance du tout, en fait, cela pourrait même être souhaitable en fonction de votre situation. Cependant, vous pouvez limiter le post-name à caractères Word (a-z, A-Z, 0-9 et _) et à traits d'union en modifiant la RewriteRulemotif. Par exemple:

RewriteRule ^\d{4}/\d{2}/([\w-]+)\.html$ http://www.example.com/$1/? [R=301,L]

Mais sinon, je ne vois pas que ce serait "dangereux".

0
MrWhite