Je viens de créer un nouveau sous-domaine pour mon blog alors blog.example.com
- auparavant www.example.com/blog
, j'essaie maintenant d'écrire des redirections 301 à partir de tous mes anciens /blog
articles dans le nouveau blog.example.com
URL. J'ai placé le code suivant dans mon htaccess
:
RewriteEngine On
RewriteCond %{HTTP_Host} ^www\.example\.com$
RewriteRule ^blog/(.*)$ http://blog.example.com/$1 [L,R=301]
Cependant, est-ce que je le mets après le # END Wordpress
dans le htaccess
ou est-ce que quelque chose me manque? Où dans le fichier htaccess
dois-je mettre ce code ou est-ce même le code correct?
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
OU Dois-je écrire
Redirect 301 /blog/example-post http://blog.example.com/example-post
Toute aide serait appréciée Merci!
... est-ce que je le mets après le
# END Wordpress
dans le htaccess ou est-ce que quelque chose me manque?
Non. Toute redirection externe devrait arriver avant le bloc de code # BEGIN WordPress
. c'est à dire. Avant WP, la demande est réécrite en interne.
Si vous l'avez placé après le bloc de code WP, il sera simplement ignoré, puisque WP aura déjà acheminé la demande.
Sinon, votre redirection mod_rewrite semble correcte, en supposant que votre ancienne URL /blog/
a toujours une barre oblique finale (vers la "racine du blog"), le sous-domaine blog
pointe au même emplacement du système de fichiers que votre domaine principal et vous avez déjà canonisé le domaine (c.-à-d. que vous ne pouvez y accéder que par le sous-domaine www
).
Redirect 301 /blog ....
Vous devez éviter de mélanger les directives RewriteRule
(c'est-à-dire mod_rewrite) et Redirect
(c'est-à-dire mod_alias). Étant donné que ces deux directives appartiennent à des modules différents, elles sont exécutées à à des moments différents pendant la requête et vous pouvez vous retrouver avec des conflits source de confusion si vous ne faites pas attention. Donc, puisque vous utilisez déjà mod_rewrite (directives WordPress), vous devriez vous en tenir à utiliser mod_rewrite pour toutes les redirections.
Peu importe si vous avez placé la Redirect
dans votre fichier de configuration - elle exécutera quand même après les directives mod_rewrite.
Vous voulez quelque chose comme ceci en utilisant un mod_alias
Redirect permanent /blog http://blog.example.com/
Le mot clé permanent entraîne l'envoi par Apache d'un statut HTTP de 301 déplacés de façon permanente au lieu de 302 trouvés.
Pour utiliser votre méthode, vous pouvez essayer ceci
RewriteEngine on
RewriteCond %{HTTP_Host} ^(www\.)?example\.com$
RewriteRule ^blog/(.*)$ http://blog.example.com/$1 [L,QSA,R=301]
RewriteCond %{HTTP_Host} ^blog\.example\.com$
RewriteCond %{REQUEST_URI} !^blog/
RewriteRule ^(.*)$ /blog/$1 [L,QSA]