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
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/
.RedirectMatch 301 /myblog/2010/(.*) /myotherblog/2010/$1
RewriteRule /myblog/2010/(.*) http://example.com/myotherblog/2010/$1 [R=301]
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?
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]
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.