web-dev-qa-db-fra.com

WordPress mod_rewrite redirige des dossiers spécifiques

Système: Debian Etch, Apache 2.2

J'ai une instance WordPress avec plusieurs blogs. Je souhaite rediriger certains dossiers en fonction de l'année et du mois, tout en laissant d'autres dossiers accéder aux emplacements réels.

Exemple: j'ai des archives pour quelques années, comme 2010, 2011 et 2012:

  • http://example.com/wordpress/myblog/2010/02
  • http://example.com/wordpress/myblog/2011/01
  • http://example.com/wordpress/myblog/2012/01

Je souhaite rediriger tous les articles de 2010 et 2011 vers un autre blog avec la même structure de dossiers:

  • http://example.com/wordpress/myotherblog/2010/02
  • http://example.com/wordpress/myotherblog/2011/01
  • etc.

J'aimerais que 2012 et les années suivantes aillent sur le site actuel (c.-à-d. http://example.com/wordpress/myblog/2012/01).

J'ai essayé mod_rewrite avec ce qui suit, une règle à la fois pour tester la redirection pendant un an seulement (et le développer plus tard pour les autres années), et aucune d'entre elles n'a fonctionné!

  • RewriteEngine est déjà activé car il y a des réécritures par défaut WordPress.
  • RewriteBase est réglé sur http://example.com/wordpress/.
  • Je mets ma règle avant que toutes les autres règles par défaut WordPress soient traitées.

N'a pas fonctionné la solution n ° 1

RedirectMatch 301 /myblog/2010/(.*) /myotherblog/2010/$1

N'a pas fonctionné la solution n ° 2

RewriteRule /myblog/2010/(.*) http://example.com/myotherblog/2010/$1 [R=301]

N'a pas fonctionné la solution n ° 3

RedirectPermanent /myblog/2010/(.*) http://example.com/myotherblog/2010/$1

J'ai également essayé les règles ci-dessus avec et sans une URL pleinement qualifiée pour le nouvel emplacement.

Le journal de réécriture, avec le niveau de journal défini sur 9, ne fournissait aucune information utile. Il montre qu'il regarde le modèle spécifié par rapport à l'URL (comme indiqué dans la règle), mais finalement, il se passe un passthrough pour http://example.com/myblog/ pour toutes les URL ou une erreur de 500 serveur interne.

Des idées sur où je pourrais me tromper ou des solutions alternatives?

2
Ps Cjef

Essayez le RewriteRule suivant:

RewriteRule ^myblog/(2010|2011)/(.*)$ http://example.com/myotherblog/$1/$2 [R=301,L,NC]

Notez l'inclusion de l'indicateur L (dernière directive), l'indicateur NC pour nocase et le fait que le nom du chemin n'inclut pas la barre oblique (car vous risqueriez de supprimer un .htaccess dans un répertoire). Si ce n'est pas dans un fichier .htaccess dans un chemin de répertoire qui n'inclut pas la barre oblique, alors simplement:

RewriteRule ^/myblog/(2010|2011)/(.*)$ http://example.com/myotherblog/$1/$2 [R=301,L,NC]

Si vous n'êtes pas sûr de cela, alors

RewriteRule myblog/(2010|2011)/(.*)$ http://example.com/myotherblog/$1/$2 [R=301,L,NC]
1
William McCall

Je ne peux pas expliquer pourquoi vos règles ne fonctionnent pas sans voir tout le fichier .htaccess, mais vous pourriez trouver le Monkeyman Rewrite Analyzer Plugin utile: -

Ce n'est qu'un analyseur, cela ne change aucune règle pour vous. Il analyse les règles jusqu'à leurs composants et affiche la connexion avec les variables de requête résultantes. Cela vous permet d'essayer différentes URL pour voir quelles règles vont correspondre et quelle sera la valeur des différentes variables de requête.

Cela pourrait vous donner de meilleurs indices sur la manière de déboguer votre code.

1
toomanyairmiles