web-dev-qa-db-fra.com

301 redirections pour le sous-domaine blog / blog to blog ne fonctionnent pas

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!

4
jenna

... 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.

5
MrWhite

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]
2
norcal johnny