web-dev-qa-db-fra.com

problème htaccess avec les redirections tombant slash

J'essaie de rediriger des URL individuelles sur le site _http://olddomain.tld_ (site retiré WordPress) vers des adresses URL individuelles sur le site _https://newdomain.tld_ (nouveau WordPress) à l'aide de _.htaccess_.

La redirection de la page d'accueil fonctionne bien avec _Redirect 301 / https://newdomain.tld_ (je sais donc que je n'ai pas oublié d'activer le moteur de réécriture, ou quelque chose du genre).

Aucune des autres redirections ne fonctionne cependant correctement. Exemple: j'écris _Redirect 301 /page/ https://newdomain.tld/page/_ dans _.htaccess_, puis _http://olddomain.tld/page/_ redirige vers _https://newdomain.tldpage_. C'est-à-dire que la redirection est présente, mais qu'elle supprime la barre oblique finale dans tous les cas.

Qu'est-ce qui peut causer cela?

J'ai essayé toutes sortes de variantes de plus en plus exotiques du _olddomain.tld_ _.htaccess_, avant de enfin avoir l'idée de voir si les barres obliques de fin sont en quelque sorte tombées sous le poids de _newdomain.tld.htaccess_. Est-ce que quelque chose ici pourrait le faire?

_<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
_

ps. Ce n'est pas this , this , this , this , this ou this .

3
gesher

Si la barre oblique finale est "supprimée", il se peut que quelque chose dans la configuration WordPress sur le site de destination qui effectue cette opération. Vérifiez le trafic réseau/HTTP ... à quel moment voyez-vous la deuxième redirection? Quel est le statut HTTP de la deuxième redirection?

Si vous tapez directement la nouvelle URL, la barre oblique finale est-elle encore supprimée?

Toutefois...

J'écris Redirect 301 /page/ https://newdomain.tld/page/ dans .htaccess ...

La directive Redirect est une directive mod_alias. Cela n'a rien à voir avec RewriteEngine, qui fait partie de mod_rewrite. Différents modules Apache fonctionnent indépendamment les uns des autres et évitez de mélanger les redirections des deux modules. Vous pouvez générer des conflits inattendus (puisque mod_rewrite est exécuté en premier, quel que soit l'ordre apparent de ces directives dans .htaccess).

Étant donné que WordPress utilise déjà mod_rewrite, vous devez modifier ces redirections afin qu'elles utilisent mod_rewrite à la place. Celles-ci doivent être exécutées avant les directives WordPress existantes. Donc, par exemple:

# Home page (ie. "/")
RewriteRule ^$ https://newdomain.tld/ [R=301,L]

# Other page (ie. "/page/")
RewriteRule ^page/$ https://newdomain.tld/page/ [R=301,L]

Notez qu'il n'y a pas de préfixe de barre oblique sur la RewriteRulemotif (comme avec mod_alias Redirect).

Est-ce que quelque chose ici pourrait le faire?

C’est simplement le WordPress _ contrôleur principal - non, il ne peut pas supprimer la barre oblique finale. Mais vraisemblablement, il y a une canonisation d'URL dans la configuration elle-même WordPress?

1
MrWhite

Il n'y a rien de mal dans le code WordPress fourni .htaccess, car il ne s'agit que de réécritures internes. Non la redirection externe est effectuée dans le code newdomain.tld's .htaccess que vous avez fourni:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Le slash final est soit supprimé par WordPress core, en fonction des règles de réécriture que vous (ou vos plugins) avez définies dans WordPress ou par une autre configuration de serveur.

Pour vérifier si c'est WordPress, allez à:

WordPress Admin Panel => Settings => Permalinks

et vérifiez le Permalink Settings. Puis dans Common Settings, vérifiez la fin de la structure de l'URL. Très probablement, vous n'avez pas la barre oblique de fin (/) ici.

Donc, si vous utilisez Custom Structure comme ceci:

https://newdomain.tld/%postname%

Faites-le comme:

https://newdomain.tld/%postname%/

Cela devrait résoudre votre problème. Si ce n'est pas le cas, cela signifie que le slash final provient d'un autre endroit. Si vous avez plusieurs plugins, essayez de les désactiver, puis activez-les un par un pour vérifier qui en est la cause.

Remarque: lors du test des redirections d'URL, veillez toujours à vider le cache du navigateur.

Si rien ne fonctionne, votre problème provient d'une autre configuration de serveur.

1
Fayaz