Изменить URL-адрес администратора Wordpress

Я немного изменил структуру своего Wordpress. Вот что у меня есть:

define('WP_SITEURL', 'http://' . $_SERVER['SERVER_NAME'] . '/wordpress');
define('WP_HOME',    'http://' . $_SERVER['SERVER_NAME']);
define('WP_CONTENT_DIR', dirname(__FILE__) . '/content');
define('WP_CONTENT_URL', 'http://' . $_SERVER['SERVER_NAME'] . '/content');

Итак, у меня есть каталог content, который содержит мои плагины и темы. И тогда у меня есть каталог wordpress, который содержит основные файлы WP, минус папку wp-content.

С этой новой структурой я должен получить доступ к бэкэнду WP с этим URL-адресом: http://site.dev/wordpress/wp-admin

Есть ли способ изменить его, чтобы я мог просто получить к нему доступ так: http://site.dev/wp-admin

Я не хочу, чтобы Wordpress находился в URL-адресе. Будет ли это обновление htaccess, которое мне нужно сделать, или есть параметр, который я могу использовать в моем файле wp-config.php?

Ответ 1

Здесь статья с сайта wordpress.

http://wordpress.org/support/topic/how-to-change-the-admin-url-or-wp-admin-to-secure-login

  • Добавить константу в wp-config.php

    define('WP_ADMIN_DIR', 'secret-folder');  
    define( 'ADMIN_COOKIE_PATH', SITECOOKIEPATH . WP_ADMIN_DIR);  
    
  • Добавьте фильтр ниже в функции functions.php

    add_filter('site_url',  'wpadmin_filter', 10, 3);  
    
    function wpadmin_filter( $url, $path, $orig_scheme ) {  
        $old  = array( "/(wp-admin)/");  
        $admin_dir = WP_ADMIN_DIR;  
        $new  = array($admin_dir);  
        return preg_replace( $old, $new, $url, 1);  
    }
    
  • Добавьте строку ниже в файл .htaccess

    RewriteRule ^secret-folder/(.*) wp-admin/$1?%{QUERY_STRING} [L]
    

Ответ 2

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

// Simple Query String Login page protection
function example_simple_query_string_protection_for_login_page() {

$QS = '?mySecretString=foobar';
$theRequest = 'http://' . $_SERVER['SERVER_NAME'] . '/' . 'wp-login.php' . '?'. $_SERVER['QUERY_STRING'];

// these are for testing
// echo $theRequest . '<br>';
// echo site_url('/wp-login.php').$QS.'<br>';   

    if ( site_url('/wp-login.php').$QS == $theRequest ) {
        echo 'Query string matches';
    } else {
        header( 'Location: http://' . $_SERVER['SERVER_NAME'] . '/' );
    }
}
add_action('login_head', 'example_simple_query_string_protection_for_login_page');

Ответ 3

Это очень полезная тема. Я сделал небольшое исправление в функции, и это моя версия:

add_filter('site_url',  'wpadmin_filter', 10, 3);

 function wpadmin_filter( $url, $path, $orig_scheme ) {
    $request_url = $_SERVER['REQUEST_URI'];

    $check_wp_admin = stristr($request_url, 'wp-admin');
    if($check_wp_admin){
        wp_redirect( home_url( '404' ), 302 );
        exit();
    }

    $old  = array( "/(wp-admin)/");
    $admin_dir = WP_ADMIN_DIR;
    $new  = array($admin_dir);
    return preg_replace( $old, $new, $url, 1);
 }

В основном для перенаправления wp-admin.

И самая важная часть:

add_rewrite_rule( '^' . 'backend/(.*)','wp-admin/$1?%{QUERY_STRING}' );

Для обновления .htaccess правила.

Ответ 4

Все, что я сделал, это переместил папку /wp-admin (внутри public_html/wordpress) в public_html и я дважды проверил, чтобы убедиться, что она будет работать, переименовав мою папку WordPress (я использовал wordpress_test, вы можете использовать что угодно) и пошел в мой сайт example.com/wp-admin - он работал так же, как если бы я зашел на example.com/wordpress/wp-admin.

Единственное, что довольно сложно, это заменить wp-admin на что-то еще, потому что WP закодировал wp-admin в многочисленных файлах. Простое изменение имени вызывает php и другие ошибки. Простой плагин, который я нахожу, легко это исправит.

Примечание: мне не нужно было писать код для этого. Мне пришлось немного изменить код для wp-admin, потому что плагин не делал то, что я хотел.

Ответ 5

Есть еще один способ обеспечить лучшую тактику для вашего защищенного wp-администратора.

Так же, как и собственное имя wp-admin, как, возможно, "worksersneeded/"

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

Вам нужно будет загрузить инструмент под названием Notepad ++: https://notepad-plus-plus.org/download/

Если вы не будете много работать с каждым из файлов в каталоге.

После этого вам нужно извлечь WordPress в папку.

Затем отредактируйте все файлы в каталоге при поиске после wp-admin. Затем замените все файлы на ваше имя: "workingneeded" или ваше собственное имя.

Как в блокноте введите "поиск в файлах", чтобы "найти что": wp-admin/

И в "заменить на"

Затем замените все файлы.

Вам также необходимо поместить в wp-config.php эту строку, чтобы отслеживать все проблемы:

ini_set('log_errors',TRUE);
ini_set('error_reporting', E_ALL);
ini_set('error_log', dirname(__FILE__) . '/error_log.txt');

После того, как вы перезаписали большую часть в каталоге WordPress, и у вашего wp-admin теперь есть имя "workingneeded", вы, скорее всего, столкнетесь с небольшими проблемами с некоторыми из ваших плагинов или тем WordPress.

Вот почему вам нужно будет зарегистрировать их в файле error_log.txt.

После нахождения ошибок в файле. Скорее всего, вам нужно будет отредактировать файл .php, который все еще пытается подключиться к wp-admin. Таким образом, вы можете заменить информацию о файле wp-admin в вашу папку администратора.

Вы можете снова загрузить свои плагины и заменить ту же процедуру, что и выше, на notepad++. Таким образом, вы можете сделать все плагины доступными с новым именем папки.

Затем загрузите папку каждого плагина в каталог wp-content с помощью плагина wp file manager.

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

Это было сделано с версией WordPress 4.9.8, а также с самой новой 5.0.3

С 5.0.3 вы получаете больше ошибок в файл error_log.txt. Неизвестно почему.

Ответ 6

Наконец-то нашел способ сделать это без плагина И БЕЗ ИЗМЕНЕНИЯ WP CORE (все уроки предлагают делать это по какой-то странной причине).

1- Скопируйте wp-login.php и переименуйте его в new-secret-url.php (в вашем корневом каталоге)

2- Откройте файл new-secret-url.php и выполните поиск/замену от wp-login.php до new-secret-url.php

3- Добавьте следующий код в ваш functions.php:

/** Hide default login */
add_action( 'init', 'marounmelhem_hide_login' );
function marounmelhem_hide_login() {

    //Only proceed for guests
    if ( ! is_user_logged_in() ) {

        //Getting current page
        $current_url   = str_replace( '/', '', $_SERVER['REQUEST_URI'] );
        $hiddenWpAdmin = 'new-secret-url'; //Change this to your new secret wp-admin url
        $redirectNaTo  = '/';

        //Checking if accessing correct login url
        if ( $current_url == $hiddenWpAdmin ) {
            wp_redirect( '/'.$hiddenWpAdmin.'.php' );
            exit;
        }

        //Only allow requests to wp-login.php coming from correct login url
        $adminToCheck = [
            'wp-admin',
            'wp-login.php'
        ];
        if (
            in_array( $current_url, $adminToCheck )
            &&
            $_GET['action'] !== "logout"
        ) {
            wp_redirect( $redirectNaTo );
            exit();
        }
    }
}

4- Это работает, только если вы не используете никакие другие формы входа в систему, если вы это делаете, вы можете изменить:

is_user_logged_in() - возможно, !current_user_can( 'subscriber' ) (или роль, указанная в логике входа в веб-интерфейс)

5- Не уверен, что ajax звонки работают с вышеуказанным, пожалуйста, дайте мне знать, если вы пробовали это