web-dev-qa-db-fra.com

Redirection de toutes les pages enfants du sous-domaine

Je n'arrive pas à faire fonctionner cette redirection ... Quelqu'un peut-il m'indiquer la bonne direction s'il vous plaît?

Sur un site WordPress, je souhaite empêcher l'accès à toutes les pages situées sous une page parent donnée. Tout ce que je veux que les gens voient, c'est cette page parent.

Donc si example.com/subdomain/parent-page est composé de:

parent-page
parent-page/sub-page-1
parent-page/sub-page-2 
...and so on

Je veux que toutes les sous-pages correspondantes soient redirigées vers example.com/subdomain/parent-page.

Mon fichier . Htaccess se trouve dans le dossier racine de example.com/subdomain.

Je pense que j’ai besoin de RedirectMatch pour pouvoir utiliser regex.

Mais toutes mes variations de:

RedirectMatch 301 parent-page/?* example.com/subdomain/parent-page

Ne travaillez pas pour une raison ou une autre. Le meilleur résultat que j'ai obtenu est la redirection de pages vers la page "page non trouvée" du domaine parent!

Clairement, il me manque quelque chose ici?

5
colic

Sur un site WordPress

WordPress utilise mod_rewrite pour gérer le routage des URL (de jolies URL) - ce que je suppose que vous utilisez - vous devriez donc éviter d'utiliser une redirection mod_alias (Redirect, RedirectMatch, etc.). (Différents modules s'exécutent à des moments différents, quel que soit l'ordre des directives dans le fichier .htaccess. Vous pouvez ainsi obtenir des résultats/conflits inattendus. Mod_rewrite généralement s'exécute avant mod_alias.)

Dans .htaccess, il est assez facile de rediriger example.com/subdomain/parent-page/<anything>, mais si vous souhaitez uniquement rediriger les pages WordPress existantes et 404, lorsque cette page n’existe pas, c’est plus complexe et vous devriez probablement rechercher WP solution plutôt que .htaccess.

Essayez quelque chose comme ce qui suit en haut de votre fichier example.com/subdomain/.htaccess. Ces directives doivent venir avant toutes les directives de routage WordPress existantes.

RewriteEngine On
RewriteRule ^parent-page/. /subdomain/parent-page [R=302,L]

Modifiez la redirection 302 (temporaire) en 301 (permanent) lorsque vous êtes sûr que tout fonctionne correctement. (Les 301 sont mis en cache par le navigateur, ce qui peut rendre les tests problématiques.)

Toute URL commençant par /subdomain/parent-page/<something> sera redirigée (que cette sous-page existe ou non). Cela permet également d'éviter une boucle de redirection.

RewriteEngine n'a besoin d'apparaître qu'une fois dans le fichier .htaccess - de préférence (plus logique) en haut.


RedirectMatch 301 parent-page/?* example.com/subdomain/parent-page

A part ... Il y a quelques choses qui ne vont pas ici. La regex n'est pas strictement valide. * correspond au caractère précédent au moins 0 fois (le caractère précédent est ?, qui est lui-même un méta-caractère). Si vous spécifiez le domaine dans l'URL cible, il doit être absolu avec protocole, etc.

3
MrWhite