Изменить 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 звонки работают с вышеуказанным, пожалуйста, дайте мне знать, если вы пробовали это