Защитите паролем один сайт в сети

Вопрос или проблема

Я хотел бы ограничить доступ к одному (поддомену) подсайту, так чтобы для просмотра сайта требовался плагин… не затрагивая другие подсайты.

Например, если у меня есть 3 подсайта, таких как…

hide.mydomain.com
public1.mydomain.com
public2.mydomain.com

Как я могу скрыть и защитить паролем только hide.mydomain.com?

Может кто-то помочь? Я пытаюсь найти решение, в основном потому, что кажется, что это сложнее сделать с поддоменом, а не с подпапкой.

Вы можете использовать мощный плагин, такой как Multisite Privacy от WPMUDEV, или вы можете использовать следующий код, который я разработал для своего проекта.

Чтобы использовать этот код, создайте плагин с ним, который вы активируете только на защищаемом сайте, или, если это звучит слишком сложно, вы можете вставить его в файл functions.php темы и обернуть вызов add_action в условное выражение, как показано ниже:

if ( get_current_blog_id() = 2 )  // Применить конфиденциальность только к блогу ID 2
  add_action('wp', 'private_site');

function private_site() {

    if( $_GET['home'] == 'fix' ) { return; }

    $isLoginPage = strpos($_SERVER['REQUEST_URI'], "wp-login.php") !== false;
    $isPhoneApp = strpos($_SERVER['REQUEST_URI'], "xmlrpc.php") !== false;
    $wpe_cookie="wpe-auth";

    if( !is_user_logged_in() && !is_admin() && !$isLoginPage && !$isPhoneApp ) {

        // WPE: Если не аутентифицирован, удалите наш куки, если он существует.
        if ( isset($_COOKIE[$wpe_cookie]) ) setcookie($wpe_cookie,'',time()-1000000,"https://wordpress.stackexchange.com/");

        $shareKey = get_post_meta( get_the_ID(), 'key', true );

        if( $_GET['key'] && is_single && $_GET['key'] == $shareKey ) {
            return;
        } else {
            $location = get_login_redirect_url( get_bloginfo( 'url') . $_SERVER['REQUEST_URI'] );
            header( 'Location: ' . $location );
            exit();
        }
    } else {
        // WPE: Аутентифицирован, поэтому установите куки правильно. Нет нужды, если он уже установлен правильно.
        $cookie_value = md5('wpe_auth_salty_dog|'.WPE_APIKEY);
        if ( ! isset( $_COOKIE[$wpe_cookie] ) || $_COOKIE[$wpe_cookie] != $cookie_value )
            setcookie($wpe_cookie,$cookie_value,0,"https://wordpress.stackexchange.com/");
    }
}

// Возвращает URL для входа с редиректом.

function get_login_redirect_url( $url="" ) {

    $url = esc_url_raw( $url );
    if ( empty( $url ) ) return false;

    // настраиваем аргументы запроса
    $query_args = array(
        'redirect_to' => urlencode( $url )
    );
    return add_query_arg( $query_args, apply_filters( 'ass_login_url', wp_login_url() ) );
}

Ответ или решение

Защита паролем отдельного подсайта в сети

Для того чтобы ограничить доступ к конкретному подсайту, например, hide.mydomain.com, и обеспечить его защиту паролем, необходимо учитывать несколько важных шагов. В условиях, когда вы работаете с подсайтами (субдоменами), подход к настройке защиты отличается от настройки для подпапок. Мы расскажем о том, как осуществить подобную защиту, используя различные методы.

Метод 1: Плагин

Одним из наиболее простых и эффективных способов реализации защиты является использование специализированного плагина. Например, вы можете рассмотреть Multisite Privacy от WPMUDEV. Этот плагин предоставляет гибкие опции настройки политики конфиденциальности для подсайтов WordPress с множественным использованием. После установки и активации плагина, вы сможете настроить параметры доступа для конкретного подсайта, установив требование ввода пароля для доступа.

Метод 2: Использование кода в тему

Если вы предпочитаете более кастомизированный подход без использования плагинов, вы можете реализовать защиту при помощи собственного кода. Например, поместите приведённый ниже код в файл functions.php вашей темы, но убедитесь, что вы обернули его в условие для конкретного блога.

if ( get_current_blog_id() == 2 ) { // Замените '2' на ID вашего подсайта
    add_action('wp', 'private_site');

    function private_site() {
        if( $_GET['home'] == 'fix' ) { return; }

        $isLoginPage = strpos($_SERVER['REQUEST_URI'], "wp-login.php") !== false;
        $isPhoneApp = strpos($_SERVER['REQUEST_URI'], "xmlrpc.php") !== false;
        $wpe_cookie="wpe-auth";

        if( !is_user_logged_in() && !is_admin() && !$isLoginPage && !$isPhoneApp ) {
            if ( isset($_COOKIE[$wpe_cookie]) ) setcookie($wpe_cookie,'',time()-1000000,"https://yourdomain.com/");

            $shareKey = get_post_meta( get_the_ID(), 'key', true );

            if( $_GET['key'] && is_single() && $_GET['key'] == $shareKey ) {
                return;
            } else {
                $location = get_login_redirect_url( get_bloginfo( 'url') . $_SERVER['REQUEST_URI'] );
                header( 'Location: ' . $location );
                exit();
            }
        } else {
            $cookie_value = md5('wpe_auth_salty_dog|'.WPE_APIKEY);
            if ( ! isset( $_COOKIE[$wpe_cookie] ) || $_COOKIE[$wpe_cookie] != $cookie_value )
                setcookie($wpe_cookie,$cookie_value,0,"https://yourdomain.com/");
        }
    }

    function get_login_redirect_url( $url="" ) {
        $url = esc_url_raw( $url );
        if ( empty( $url ) ) return false;

        $query_args = array(
            'redirect_to' => urlencode( $url )
        );
        return add_query_arg( $query_args, apply_filters( 'ass_login_url', wp_login_url() ) );
    }
}

Заключение

Обе предложенные стратегии позволяют вам надежно защитить доступ к вашему подсайту. Выбор между использованием плагина и внедрением собственного кода зависит от ваших технических навыков и требований к защите данных. Плагин может упростить процесс, предоставив вам готовые решения, тогда как собственный код даёт больше контроля и настроек.

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

Оцените материал
Добавить комментарий

Капча загружается...