Отключить внешний интерфейс, чтобы использовать его только в качестве CMS?
Вопрос
Я использую базу данных WordPress и серверную часть для администрирования новостей на веб-сайте моей группы, и все работает отлично, однако я хотел бы отключить интерфейс самого WordPress.
У меня установлена установка WordPress в /wordpress/
и, очевидно, раздел администратора находится под /wordpress/wp-admin/
.
Каков был бы лучший способ ограничить доступ кого-либо к самому *un*setup-сайту WordPress, не затрагивая при этом раздел администрирования?
Во всяком случае, я мог бы просто перенаправить на соответствующую домашнюю страницу веб-сайта (domain.com/
).
Решение
Чтобы убедиться, что только внешний интерфейс перенаправляется на domain.com
, создайте тему, использующую функцию PHP header().
- Создайте папку с названием Redirect или что -то в этом роде.
- Добавьте два файла в папку:
style.css
иindex.php
(необходимо для действующей темы WP) В
style.css
, добавьте что -то вроде этого:/*
Название темы:Перенаправление
Описание:Перенаправляет внешний интерфейс на домен.com
*/В
index.php
Добавь это:заголовок("Местоположение: http://домен.com" );
- Загрузите папку в каталог тем, а затем активируйте ее в пользовательском интерфейсе администратора.
Другие советы
Используйте тему с «пустыми данными».Поместите два файла в каталог, затем активируйте «тему».
стиль.css
/*
Theme Name: turn off frontend
Theme URI:
Description:
Author:
Version:
License: GNU
License URI:
Tags:
*/
и index.php
<?php
exit;
Поместите это в свой .htaccess и перечислите пути, которые вы хотите оставить доступными:
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]
добавьте это в .htaccess в корневом каталоге
redirect 301 /wordpress http://www.domain.com
РЕДАКТИРОВАТЬ:На самом деле это просто быстрое решение, возможно, есть решения получше.Другой способ — добавить функцию в ваш файл function.php, которая затем вызывается в wp_head() для перенаправления таким образом.Используя этот метод, вы также можете позволить себе просмотреть его с помощью простой проверки IP.
Хотя это довольно старый вопрос с уже принятым ответом, кто-то может найти это полезным, особенно потому, что ни одно из этих решений мне не помогло.
function redirect_to_backend() {
if( !is_admin() ) {
wp_redirect( site_url('wp-admin') );
exit();
}
}
add_action( 'init', 'redirect_to_backend' );
Сам код довольно поясняющий:
- запустите проверку хука init
- проверьте, является ли страница, которую мы загружаем, интерфейсной (не wp-admin)
- перенаправление на серверную часть (wp-admin)
Просто поместите код в любой плагин или в файл function.php темы, и все должно работать «из коробки».
РЕДАКТИРОВАТЬ:
Если у вас это не работает (у меня были небольшие проблемы даже с этим кодом), вы можете создать новую тему (или дочернюю тему) и поместить внутрь только этот контент. header.php
файл:
<?php
header("Location: ".get_admin_url());
exit();
ИМХО, плагин потребует меньше работы и больше подходит для конкретного случая.
<?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');
}