Redirigez le site Web entier vers une seule page


10

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

Je ne connais aucun plugin en 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.

Tout d'abord, 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=813est l'ID de ma page de maintenance, bien sûr.

Quelqu'un connaît-il un plugin de mode de maintenance qui redirige vers une page publiée?

Sinon, quelqu'un peut-il m'aider à corriger les règles de mod_rewrite? Acclamations supplémentaires si nous pouvons laisser de /wp-admincôté les règles de redirection.

Réponses:


14

Vous pouvez réellement le faire à partir de WordPress lui-même, au lieu d'avoir à proposer un correctif .htaccess déroutant et sur-conçu.

Nous pouvons accrocher dans le template_redirectfiltre, qui ne se déclenche que sur le front-end (pas dans wp-admin). Nous utilisons ensuite la is_page()fonction pour vérifier si nous visualisons une page avec l'ID 813. Sinon, redirigez vers cette page en utilisant la wp_redirect()fonction.

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 pour un mode de maintenance, car la redirection est effectuée avec l'en-tête HTTP 302 `` temporaire '', permettant aux robots et aux moteurs de recherche de savoir que votre site sera bientôt opérationnel. Cependant, si vous déplacez le site de manière permanente, vous souhaiterez peut-être utiliser un en-tête HTTP 301 «permanent» pour la redirection. Vous pouvez le faire en ajoutant un deuxième paramètre à la wp_redirectfonction. 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;
} );

Cela fonctionne aussi très bien pour mon objectif. Sauf en ajoutant une touche - le site est "en panne" pour de bon et je veux garder WP en place et fonctionner en servant la page d'adieu comme page d'accueil. Existe-t-il un moyen d'ajouter un en-tête 301 à ce type de redirection pour le référencement?
Tapefreak

@Tapefreak Vous pouvez définir l'en-tête HTTP comme deuxième paramètre de la wp_redirectfonction. Exemple:wp_redirect( home_url( 'index.php?page_id=183' ), 301 );
karité

1

J'ai intégré la réponse acceptée par @shea dans un plugin à 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 depuis 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 du plugin, mais je pourrais envisager de créer une page d'options si les gens le demandent:

  • DESTINATION_URL : URL complète où rediriger les utilisateurs; peut être une page en dehors du domaine du site Web.
  • DESTINATION_URL_ID : si l'URL de redirection est une page ou un article WordPress, spécifiez ici son ID WordPress.
  • USER_CAPABILITY : les utilisateurs disposant de cette fonctionnalité ne seront pas redirigés; laissez vide pour rediriger tout le monde; la valeur par défaut est 'manage_options' qui est activée pour les utilisateurs administrateurs.
  • REDIRECT_STATUS_CODE : état de redirection: 302 pour la redirection temporaire, 301 pour la redirection permanente.
  • DEBUG : indique s'il faut imprimer les informations de débogage dans 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 envisager à la place l'un des nombreux plugins de maintenance disponibles sur le référentiel de plugins WordPress.org.

Faites-moi savoir si vous rencontrez des problèmes lors de l'exécution du plugin 😊


0

J'irais pour une solution beaucoup plus simple. Mon hypothèse est que vous ne voulez que personne ne voie qu'une seule page - pas besoin de voir une page WP - pour toute demande pour votre domaine.

Alors, pourquoi ne pas créer une page HTML, la styliser avec du CSS et mettre cette page dans un autre dossier sur votre plateforme 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 plates-formes d'hébergement, vous pouvez spécifier le dossier de base d'un domaine. Pointez donc votre domaine vers ce nouveau dossier de base. Pas besoin de redirections htaccess compliquées, ou de plugins WP, ou de filtres spéciaux pour se connecter à WP.

Ou, vous pouvez déplacer tout le contenu hors du ou des dossiers racine du domaine actuel et mettre votre simple fichier HTML à sa place.

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

Dans les deux cas, il s'agirait d'une solution simple à vos besoins de n'avoir qu'une seule 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]

..remplacer avec votre domaine actuel. Rend le SEO heureux aussi.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.