web-dev-qa-db-fra.com

Comment faire une redirection 301 vers une sous-page à l'aide d'un fichier htaccess?

J'ai 2 URL. Fondamentalement page et sous page comme ci-dessous.

  • http://example.com/services
  • http://example.com/services/service-1

Je souhaite ajouter une règle de redirection 301 dans le fichier .htaccess afin que, lorsque quelqu'un ouvre la page:

http://example.com/services

il devrait rediriger vers sa sous-page:

http://example.com/services/service-1

J'ai essayé de créer une règle dans le fichier .htaccess mais celui-ci passe en boucle de redirection en tant que page secondaire. Voici mon code pour le fichier .htaccess:

Redirect 301 /services /services/service-1

Mise à jour: Ci-dessous le code complet du fichier htaccess

RewriteRule ^for-patients$ /for-patients/children [R=302,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
aslamdoctor
Redirect 301 /services /services/service-1

Cela entraîne une boucle de redirection, car la directive mod_alias Redirect est préfixe matching . Ainsi, le chemin source /services correspond au chemin redirigé /services/services-1, etc. etc.

Cependant, comme vous utilisez déjà mod_rewrite (dans le cadre de WordPress), vous devez également effectuer cette redirection à l'aide de mod_rewrite (par opposition à mod_alias). Différents modules s'exécutent à différents moments de la requête (mod_rewrite avant mod_alias), malgré l'ordre apparent dans .htaccess, ce qui peut entraîner des conflits inattendus.

Donc, essayez plutôt le suivant before votre contrôleur frontal WordPress existant (c'est-à-dire avant le commentaire # BEGIN WordPress):

RewriteRule ^services$ /services/service-1 [R=302,L]

Cela correspond à l'URL /services uniquement. Notez qu'il n'y a pas de préfixe de barre oblique dans RewriteRule pattern lorsqu'il est utilisé dans .htaccess.

Ceci est une redirection temporaire (302). Changez-le en 301 s'il est prévu qu'il soit permanent, mais uniquement après avoir confirmé que tout fonctionne correctement. (Par défaut, le navigateur met 301 en cache difficile, ce qui peut rendre les tests difficiles.)

UPDATE: Pour que ce qui précède fonctionne avec (ou sans) une barre oblique à la fin de l'URL demandée, remplacez la valeur ci-dessus par:

RewriteRule ^services/?$ /services/service-1 [R=302,L]

Et si votre URL cible doit également comporter une fin de barre oblique, ajoutez-la ensuite sur le substitution . c'est à dire. /services/service-1, sinon WordPress émettra une autre redirection ou vous créerez éventuellement un problème de contenu en double.

1
MrWhite