web-dev-qa-db-fra.com

Rediriger le site Web entier vers une seule page

Je dois rediriger un site WordPress complet vers une seule page WordPress. Une sorte de mode de maintenance, mais la redirection doit aller sur une page WordPress publiée. Malheureusement, la page de maintenance que je dois montrer doit utiliser d'autres plugins WordPress.

Je ne suis au courant d'aucun plug-in du mode maintenance qui vous permette de le faire. Tout au plus, ils vous permettent d'écrire du code HTML/CSS personnalisé.

Je pensais à une règle .htaccess mod_rewrite. Cependant, je suis très faible avec mod_rewrite.

Premièrement, je j'ai désactivé les redirections canoniques .

Ensuite, j'ai essayé d'utiliser:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/index.php?page_id=813$
RewriteRule ^(.*)$ /index.php?page_id=813 [R=307,L]

Cependant, ces règles génèrent des boucles de redirection. page_id=813 est l'ID de ma page de maintenance, bien sûr.

Est-ce que quelqu'un est au courant d'un plugin en mode maintenance, qui redirige vers une page publiée?

Sinon, quelqu'un peut-il m'aider à résoudre les règles mod_rewrite? Bravo supplémentaire si nous pouvons laisser /wp-admin en dehors des règles de redirection.

10
dgraziotin

Vous pouvez le faire depuis WordPress même, au lieu d’avoir besoin d’un correctif .htaccess déroutant et trop élaboré.

Nous pouvons nous connecter au filtre template_redirect, qui ne se déclenche que sur le front-end (pas dans wp-admin). Nous utilisons ensuite la fonction is_page() pour vérifier si nous affichons une page avec l’ID 813. Si ce n’est pas le cas, redirigez-vous vers cette page à l’aide de la fonction wp_redirect().

add_action( 'template_redirect', function() {
    if ( is_page( 813 ) ) {
        return;
    }

    wp_redirect( esc_url_raw( home_url( 'index.php?page_id=183' ) ) );
    exit;
} );

Cela fonctionnera très bien en mode maintenance, car la redirection s'effectue avec l'en-tête HTTP "temporaire" 302, ce qui permet aux robots et aux moteurs de recherche de savoir que votre site sera bientôt opérationnel. Toutefois, si vous déplacez le site de manière permanente, vous pouvez utiliser un en-tête HTTP "permanent" 301 pour la redirection. Vous pouvez le faire en ajoutant un deuxième paramètre à la fonction wp_redirect. Exemple:

add_action( 'template_redirect', function() {
    if ( is_page( 813 ) ) {
        return;
    }

    wp_redirect( esc_url_raw( home_url( 'index.php?page_id=183' ) ), 301 );
    exit;
} );
15
shea

J'ai intégré la réponse acceptée par @shea dans un plug-in d'un fichier et ajouté deux options: rediriger uniquement les utilisateurs non-administrateurs et rediriger vers une URL arbitraire.

Si vous êtes intéressé, n'hésitez pas à télécharger le plugin de Github =>https://github.com/Idearia/wp-redirect-website-to-url.

Les options

Les options du plugin sont très simples. pour le moment, ils sont codés en dur dans le fichier plugin, mais je pourrais envisager de construire une page d'options si les gens le demandent:

  • DESTINATION_URL : L'URL complète vers laquelle rediriger les utilisateurs; peut être une page en dehors du domaine du site.
  • DESTINATION_URL_ID : Si l'URL de redirection est une page WordPress ou une publication, spécifiez ici son identifiant WordPress.
  • USER_CAPABILITY : Les utilisateurs dotés de cette fonctionnalité ne seront pas redirigés; laisser en blanc pour rediriger tout le monde; La valeur par défaut est 'manage_options' qui est activée pour les utilisateurs administrateurs.
  • REDIRECT_STATUS_CODE : Statut de redirection: 302 pour la redirection temporaire, 301 pour la redirection permanente.
  • DEBUG: Indique s'il faut imprimer les informations de débogage dans le fichier debug.log.

Informations mises à jour sur la page Github => https://github.com/Idearia/wp-redirect-website-to-url .

Veuillez noter que le plugin est très basique. les utilisateurs plus avancés pourraient plutôt envisager l'un des nombreux plug-ins de maintenance disponibles sur le référentiel de plug-ins WordPress.org.

Faites-moi savoir si vous avez un problème avec le plugin ????

1

Je choisirais une solution beaucoup plus simple. Mon hypothèse est que vous ne voulez que quiconque ne voie qu'une seule page - aucune page WP ne doit être visible - pour toute demande relative à votre domaine.

Alors, pourquoi ne pas créer une page HTML, lui attribuer un style CSS et la placer dans un autre dossier de votre plate-forme d'hébergement. Assurez-vous que la page ressemble à ce que vous voulez.

Ensuite, pointez simplement votre domaine vers ce nouveau dossier. Avec la plupart des plateformes d'hébergement, vous pouvez spécifier le dossier de base d'un domaine. Alors pointez votre domaine vers ce nouveau dossier de base. Pas besoin de redirections htaccess compliquées, ni de plugins WP, ni de filtres spéciaux à connecter à WP.

Vous pouvez également déplacer tout le contenu hors du ou des dossiers racine du domaine actuel et placer votre simple fichier HTML à la place.

Les lieux d'hébergement peuvent également avoir une "redirection globale" pour toute demande vers n'importe quelle page de votre domaine.

Dans tous les cas, une solution simple à vos besoins consiste à n’avoir qu’une page pour l’ensemble de votre domaine.

Si vous voulez vraiment une solution htaccess, utilisez celle-ci:

RewriteEngine on

RewriteRule ^(.*)$ http://www.example.com/  [R=permanent,L]

..replacing avec votre domaine actuel. Rend le référencement heureux également.

0
Rick Hellewell