Désactiver le frontal pour l'utiliser uniquement en tant que CMS?

18

J'utilise la base de données et le back-end WordPress pour administrer les nouvelles du site Web de mon groupe et tout fonctionne très bien, mais je voudrais désactiver le front-end de WordPress lui-même.

J'ai l'installation de WordPress installée dans /wordpress/et évidemment la section admin est sous /wordpress/wp-admin/.

Quelle serait la meilleure façon d'empêcher quelqu'un d'accéder au site WordPress plutôt * non * configuré sans affecter la section admin?

Si quoi que ce soit, je pourrais simplement rediriger vers la page d'accueil appropriée du site Web ( domain.com/).

Nick Bedford
la source

Réponses:

19

Pour vous assurer que seul le serveur frontal redirige vers domain.com, créez un thème qui utilise la fonction PHP header ().

  • Créez un dossier appelé redirection ou quelque chose.
  • Ajoutez deux fichiers dans le dossier: style.csset index.php (nécessaire pour un thème WP valide)
  • Dans style.css, ajoutez quelque chose comme ceci:

    / *
    Nom du thème: Redirection
    Description: redirige le frontal vers domain.com
    * /

  • En index.phpajouter ceci:

    en-tête ("Emplacement: http://domain.com ");

  • Téléchargez le dossier dans le répertoire des thèmes, puis activez-le dans l'interface d'administration.
Corey McKrill
la source
C'est drôle car cette lumière vient de s'éteindre dans ma tête. Pourquoi ne pas simplement créer un thème qui redirige! Merci.
Nick Bedford
1
peut être évident pour certains, mais cela n'a fonctionné pour moi que lorsque la première ligne de index.php était<?php
finsbury
8

Utilisez un thème avec "données vides". Mettez deux fichiers dans le répertoire, puis activez "thème".

style.css

/*
Theme Name: turn off frontend
Theme URI: 
Description: 
Author: 
Version: 
License: GNU 
License URI: 
Tags:
*/

et index.php

<?php
exit;
Marcin
la source
J'aime cette solution, de cette façon, vous pouvez facilement revenir à un thème de travail complet. De plus, vous pouvez ajouter quelque chose comme <?php wp_redirect(site_url('wp-admin'));die();au lieu de quitter pour rediriger automatiquement vers une ressource donnée.
MiCc83
3

Mettez ceci dans votre .htaccess et listez les chemins que vous voulez garder disponibles:

RewriteCond %{REQUEST_URI} !^/wp-admin
RewriteCond %{REQUEST_URI} !^/wp-includes
RewriteCond %{REQUEST_URI} !^/wp-login
RewriteCond %{REQUEST_URI} !^/wp-content/uploads
RewriteCond %{REQUEST_URI} !^/wp-content/plugins
RewriteCond %{REQUEST_URI} !^/wp-content/cache
RewriteRule (.*) http://yournewdomain.com/ [R=301,L]
Ben Rogmans
la source
2

ajoutez ceci au .htaccess dans votre répertoire racine

redirect 301 /wordpress http://www.domain.com

EDIT: Ceci est vraiment juste une solution rapide, il pourrait y avoir de meilleures solutions. Une autre façon serait d'ajouter une fonction à votre fichier functions.php, qui est ensuite appelée dans wp_head () pour rediriger de cette façon. En utilisant cette méthode, vous pouvez également vous permettre de la visualiser avec une simple vérification IP.

supajb
la source
Cela a un effet secondaire qui /wordpress/wp-adminredirige désormais vers//wp-admin
Nick Bedford
1

Bien qu'il s'agisse d'une question assez ancienne avec une réponse déjà acceptée, quelqu'un pourrait trouver cela utile, d'autant plus qu'aucune de ces solutions n'a fonctionné pour moi.

function redirect_to_backend() {
    if( !is_admin() ) {
        wp_redirect( site_url('wp-admin') );
        exit();
    }
}
add_action( 'init', 'redirect_to_backend' );

Le code lui-même est assez explicatif:

  • exécuter la vérification sur le crochet «init»
  • vérifier si la page que nous chargeons est front-end (pas wp-admin)
  • rediriger vers le back-end (wp-admin)

Il suffit de mettre le code dans n'importe quel plugin ou dans le fichier function.php du thème et cela devrait fonctionner hors de la boîte.

ÉDITER:

Si cela ne fonctionne pas pour vous (j'ai eu des problèmes mineurs même avec ce code), vous pouvez créer un nouveau thème (ou un thème enfant) et ne mettre que ce contenu dans le header.phpfichier:

<?php
header("Location: ".get_admin_url());
exit();
dev_masta
la source
0

OMI, un plugin nécessiterait moins de travail et est plus approprié pour le cas spécifique.

<?php
/*
Plugin Name: Disalbe Frontend
Description:  Disable the frontend interface of the website, leave only CMS and REST API
Author: Nikola Mihyalov
Version: 1.0
*/

add_action('init', 'redirect_to_backend');

function redirect_to_backend() {
    if(
        !is_admin() &&
        !is_wplogin() &&
        !is_rest()
    ) {
    wp_redirect(site_url('wp-admin'));
    exit();
  }
}


if (!function_exists('is_rest')) {
    /**
     * Checks if the current request is a WP REST API request.
     * 
     * Case #1: After WP_REST_Request initialisation
     * Case #2: Support "plain" permalink settings
     * Case #3: URL Path begins with wp-json/ (your REST prefix)
     *          Also supports WP installations in subfolders
     * 
     * @returns boolean
     * @author matzeeable
     */
    function is_rest() {
        $prefix = rest_get_url_prefix( );
        if (defined('REST_REQUEST') && REST_REQUEST // (#1)
            || isset($_GET['rest_route']) // (#2)
                && strpos( trim( $_GET['rest_route'], '\\/' ), $prefix , 0 ) === 0)
            return true;

        // (#3)
        $rest_url = wp_parse_url( site_url( $prefix ) );
        $current_url = wp_parse_url( add_query_arg( array( ) ) );
        return strpos( $current_url['path'], $rest_url['path'], 0 ) === 0;
    }
}

function is_wplogin(){
    $ABSPATH_MY = str_replace(array('\\','/'), DIRECTORY_SEPARATOR, ABSPATH);
    return ((in_array($ABSPATH_MY.'wp-login.php', get_included_files()) || in_array($ABSPATH_MY.'wp-register.php', get_included_files()) ) || (isset($_GLOBALS['pagenow']) && $GLOBALS['pagenow'] === 'wp-login.php') || $_SERVER['PHP_SELF']== '/wp-login.php');
}
nikksan
la source