1 votes

Apache: Rediriger toutes les demandes en .html ET en .php vers un dossier + WordPress

Après une relance, j'ai un tas de backlinks morts pointant vers des URL avec des extensions de fichier .php ou .html. Ce serait bien de les rediriger en masse en utilisant .htaccess et le module mod_rewrite.

La redirection des demandes en .html fonctionne bien, cependant, je n'arrive pas à faire fonctionner la redirection des URL en .php. Veuillez noter que j'utilise WordPress, donc il doit y avoir une exemption pour le dossier /wp-admin/.

Voici ce que j'ai trouvé jusqu'à présent, mais ça ne fonctionne pas pour les .php:

# BEGIN WordPress

RewriteEngine On
RewriteBase /

# Rediriger les requêtes http vers https
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^(.*)$ https://www.example.com/$1 [L]

# Rediriger html
RewriteCond %{REQUEST_URI} \.html
RewriteRule ^(.*)\.html$ /$1 [L] 

# Rediriger php NE FONCTIONNE PAS
RewriteCond %{REQUEST_URI} !^/wp-admin/
RewriteCond %{REQUEST_URI} \.php
RewriteRule ^(.*)\.php$ /$1 [L] 

# Les lignes ci-dessous proviennent de WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

Pouvez-vous repérer où je me trompe? Ou suis-je complètement perdu?

1voto

MrWhite Points 11269
# Redirection html
RewriteCond %{REQUEST_URI} \.html
RewriteRule ^(.*)\.html$ /$1 [L]

Ce n'est pas une "redirection", comme dans une "redirection 3xx externe", que vous semblez suggérer. Si vous voyez une "redirection", c'est que soit quelque chose d'autre le fait, soit vous voyez une réponse mise en cache. La directive ci-dessus est une réécriture interne - l'URL dans la barre d'adresse du navigateur ne change pas (ce serait mauvais pour le SEO).

La directive RewriteCond est également superflue dans ce cas... cela signifie simplement que vous vérifiez deux fois pour .html dans l'URL demandée.

Si vous souhaitez supprimer l'extension .html via une redirection, vous avez juste besoin de quelque chose comme :

RewriteRule ^(.*)\.html$ /$1 [R,L]

Cependant, pour supprimer l'extension .php de l'URL, vous devez également éviter de rediriger vers index.php (que le contrôleur frontal de WordPress réécrit), ou assurez-vous seulement de vérifier la requête initiale, pas la requête réécrite. Par exemple :

# Redirection php (évitant "/wp-admin/" et "/index.php")
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteCond %{REQUEST_URI} !^/wp-admin/
RewriteRule ^(.*)\.php$ /$1 [R,L]

Pour vous assurer de ne tester que la requête initiale et non une requête réécrite, vous pouvez utiliser une condition comme :

RewriteCond %{ENV:REDIRECT_STATUS} ^$

Cela vérifie simplement que la variable d'environnement REDIRECT_STATUS est vide - ce qui est le cas lors de la requête initiale. Après le premier rewrite réussi, il est défini sur "200" (comme dans le statut HTTP 200 OK).

Changez le R en R=301 si cette redirection doit être permanente, mais seulement une fois que vous avez confirmé que tout fonctionne correctement.

Vous devriez également éviter d'ajouter vos propres directives personnalisées dans le bloc # BEGIN WordPress, car celles-ci pourraient être remplacées par WordPress lui-même. Au lieu de cela, ces directives doivent être écrites avant le bloc # BEGIN WordPress, aux côtés de votre redirection HTTP vers HTTPS (qui n'est en fait pas une redirection non plus - vous avez besoin du drapeau R sur le RewriteRule).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X