Отключить интерфейс для использования только в качестве CMS?

18

Я использую базу данных WordPress и серверную часть для администрирования новостей для веб-сайта моей группы, и все работает отлично, однако я бы хотел отключить внешний интерфейс самой WordPress.

У меня установлена ​​инсталляция WordPress /wordpress/и, очевидно, раздел администратора находится под ним /wordpress/wp-admin/.

Что может быть лучшим способом запретить кому-либо доступ к довольно * un * setup самому сайту WordPress, не затрагивая раздел администратора?

Во всяком случае, я мог бы просто перенаправить на соответствующую домашнюю страницу сайта ( domain.com/).

Ник Бедфорд
источник

Ответы:

19

Чтобы убедиться, что только внешний интерфейс перенаправляет на domain.com, создайте тему, которая использует функцию заголовка PHP ().

  • Создайте папку с именем redirect или что-то еще.
  • Добавьте два файла в папку: style.cssи index.php (необходимо для правильной темы WP)
  • В style.cssдобавьте что-то вроде этого:

    / *
    Название темы:
    Описание перенаправления : Перенаправляет интерфейс на domain.com
    * /

  • В index.phpдобавление это:

    header («Местоположение: http://domain.com »);

  • Загрузите папку в каталог тем и затем активируйте ее в интерфейсе администратора.
Кори МакКрилл
источник
Это забавно, потому что этот свет просто погас в моей голове. Почему бы просто не сделать тему, которая перенаправляет! Благодарю.
Ник Бедфорд
1
может быть очевидным для некоторых, но это работало только для меня, когда первая строка index.php была<?php
finsbury
8

Используйте тему с «пустыми данными». Поместите два файла в каталог, затем активируйте «тему».

style.css

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

и index.php

<?php
exit;
Marcin
источник
Мне нравится это решение, так что вы можете легко вернуться к полнофункциональной теме. Более того, вы можете добавить что-то подобное <?php wp_redirect(site_url('wp-admin'));die();вместо выхода для автоматического перенаправления на данный ресурс.
MiCc83
3

Поместите это в ваш .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]
Бен Рогманс
источник
2

добавьте это в .htaccess в вашем корневом каталоге

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

РЕДАКТИРОВАТЬ: Это действительно просто быстрое решение, возможно, есть лучшие решения. Другой способ - добавить функцию в ваш файл functions.php, который затем вызывается в wp_head () для перенаправления таким образом. Используя этот метод, вы также можете позволить себе просмотреть его с помощью простой проверки IP.

supajb
источник
Это имеет побочный эффект, который /wordpress/wp-adminтеперь перенаправляет на//wp-admin
Ник Бедфорд
1

Хотя это довольно старый вопрос с уже принятым ответом, кто-то может найти это полезным, тем более что ни одно из этих решений не помогло мне.

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();
dev_masta
источник
0

ИМО, плагин потребует меньше работы и больше подходит для конкретного случая.

<?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
источник