web-dev-qa-db-fra.com

Où placer les redirections 301 dans le fichier .htaccess sur un site WordPress

J'ai précédemment modifié mon fichier .htaccess pour le rediriger d'une version www vers une version non-www et il fonctionne correctement. Cependant, il me faut maintenant faire des redirections de pages. Je regarde le fichier .htaccess et je ne sais pas trop où placer le code de redirection actuel. J'ai un site WordPress. Est-ce que cela se passe à la fin ou dans la zone où il est écrit WordPress? Voici mon fichier .htaccess:

# Use PHP5.4 as default
# Changed PHP handler from application/x-httpd-php54 to application/x-httpd-phpbeta
# on Thu Dec 17 16:50:26 MST 2015.
AddHandler application/x-httpd-phpbeta .php

RewriteEngine on
RewriteCond %{HTTP_Host} ^www\.example\.com$
RewriteRule ^/?$ "http\:\/\/example\.com\/" [R=301,L]

# 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
1
techygal
# Use PHP5.4 as default
# Changed PHP handler from application/x-httpd-php54 to application/x-httpd-phpbeta on Thu Dec 17 16:50:26 MST 2015.
AddHandler application/x-httpd-phpbeta .php

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    # Insert redirect based rewrites here.
    # Example: RewriteRule ^redirectme$ http://example.com/redirectme [R=301,L]
    #
    RewriteCond %{HTTP_Host} ^www\.example\.com$
    RewriteRule ^/?$ "http\:\/\/example\.com\/" [R=301,L]
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

# END WordPress

J'ai légèrement modifié votre fichier .htaccess. Premièrement, les règles de réécriture doivent être à l'intérieur du bloc IfModule, car si l'administrateur du serveur supprime ultérieurement mod_rewrite d'Apache, votre code ne cassera pas le système, mais sera ignoré.

En outre, vérifiez mon code pour voir le meilleur endroit pour mettre en redirection. J'ai suggéré là pour minimiser la latence. Les règles sont vérifiées dans l'ordre, du haut vers le bas.

2
Mike

L’important est de placer votre externe (mod_rewrite[*1]) redirige avant le WordPress interne réécrit (comme le suggère Mike dans sa réponse).

Les WordPress réécritures sont un "catch all" et réécrivent tout. Donc, si vous placez des réécritures/redirections après le bloc WordPress, elles seront simplement ignorées.

RewriteCond %{HTTP_Host} ^www\.example\.com$
RewriteRule ^/?$ "http\:\/\/example\.com\/" [R=301,L]

(Mis à part la pléthore d’évasions inutiles dans la substitution), ceci n’est pas complet. Cela ne fait que rediriger les demandes vers la racine du site. Vous voulez probablement aussi rediriger www.example.com/<whatever> vers example.com/<whatever>? Dans ce cas, vous avez besoin de quelque chose comme ceci à la place (en .htaccess):

RewriteCond %{HTTP_Host} ^www\.example\.com$
RewriteRule (.*) http://example.com/$1 [R=301,L]

(Définissez-vous également votre domaine préféré dans le WordPress config?)


[*1] Notez que si vous utilisiez les directives mod_alias Redirect (ou RedirectMatch) pour vos redirections, le lieu où vous avez placé vos redirections par rapport au contrôleur WordPress (qui utilise mod_rewrite, c'est-à-dire _ les directives RewriteCond et RewriteRule). Cela est dû au fait que les directives mod_alias (Redirect/RedirectMatch) seront toujours traitées (après mod_rewrite/RewriteRule), quelle que soit leur position dans le fichier de configuration.

2
MrWhite