J'utilise la base de données WordPress et le back-end pour administrer les nouvelles pour le site Web de mon groupe et tout fonctionne très bien, mais j'aimerais désactiver le frontal 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/
.
Quel serait le meilleur moyen d'empêcher quelqu'un d'accéder au site WordPress plutôt * un * d'installation lui-même sans affecter la section admin?
Au mieux, je pourrais simplement rediriger vers la page d'accueil appropriée du site Web (domain.com/
).
Pour vous assurer que seules les redirections frontales vers domain.com
, créez un thème utilisant la fonction PHP header ().
style.css
et index.php
(nécessaire pour un thème WP valide).Dans style.css
, ajoutez quelque chose comme ceci:
/ *
Nom du thème: Redirect
Description: redirige le serveur vers domain.com.
* /
Dans index.php
, ajoutez ceci:
en-tête ("Emplacement: http://domain.com ");
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;
Mettez ceci dans votre .htaccess et dressez la liste des 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]
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 méthode consiste à 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 un simple contrôle IP.
Bien que ce soit une question plutôt ancienne avec une réponse déjà acceptée, cela pourrait être utile à quelqu'un, d'autant plus qu'aucune de ces solutions ne fonctionnait 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:
Il suffit de mettre le code dans n’importe quel plugin ou dans le fichier function.php du thème et il devrait fonctionner immédiatement.
MODIFIER:
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 fichier header.php
:
<?php
header("Location: ".get_admin_url());
exit();
IMO, un plugin nécessiterait moins de travail et conviendrait mieux à un cas particulier.
<?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');
}