Change Wordpress Admin URL


Change Wordpress Admin URL

我改变了我的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');

所以我有一个内容目录包含我的插件和主题。然后我有一个wordpress目录,其中包含核心WP文件,减去WP -content文件夹。

使用这个新结构,我必须使用以下URL访问WP后端:http://site.dev/wordpress/wp-admin

有没有办法改变它,让我可以像这样访问它:http://site.dev/wp-admin

我不希望wordpress出现在URL中。这是我需要进行的htaccess更新,还是我可以在wp-config.php文件中使用设置?

这是一篇来自wordpress网站的文章

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

  1. 添加常量到wp-config.php

    define('WP_ADMIN_DIR', 'secret-folder');  
    define( 'ADMIN_COOKIE_PATH', SITECOOKIEPATH . WP_ADMIN_DIR);  
    
  2. 将下面的过滤器添加到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);  
    }
    
  3. 将下面一行添加到。htaccess文件

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

我尝试了一下,在下面这个简单的函数中有一种更简单的方法来完成这一切,而无需处理其他任何事情(创建不必要的文件夹,重定向,页面等)。

// 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');

这是一个很有帮助的话题。我对函数做了一些修改,这是我的版本:

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规则。

我所做的就是将/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改变一些代码,因为插件没有做我想要的。

终于找到了一种不需要插件和不修改WP CORE的方法(所有教程都建议这样做,因为一些奇怪的原因)

1-复制wp-login.php并将其重命名为new-secret-url.php(在根目录下)

2-打开new-secret-url.php文件,执行搜索/替换wp-login.phpnew-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调用是否与上述工作,请让我知道,如果你已经尝试过

还有一种方法可以确保更好地保护您的wp-admin。

也有自己的wp-admin名,比如:"worksersneeded/"

我对我的一个网站做了这个,最后奇迹般地发现,被探测的SSL网站从不同的地理位置对我的网站显示不同。

你必须下载一个叫做notepad++的工具:https://notepad-plus-plus.org/download/

除非您将在目录中的每个文件上做很多工作。

之后你需要将WordPress解压到一个文件夹中。

然后编辑目录下的所有文件,同时搜索wp-admin。然后将所有文件替换为您的名称:"workersneeded"或您自己的名称。

就像在记事本中输入"search in files"来"find what": wp-admin/

在"replace with"中:workersneeded/

然后替换所有文件。

您还需要在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现在的名称是"workersneeded",你很可能会遇到一些WordPress插件或主题的小问题。

这就是为什么你需要将它们记录到error_log.txt文件中。

在找到文件中的错误后。您很可能需要编辑.php文件,该文件仍试图连接到wp-admin。这样,您就可以将wp-admin的文件信息替换到您的管理文件夹中。

你可以再次下载你的插件,用notepad++替换上面的程序。这样你就可以用新的文件夹名来使用所有的插件了。

然后使用wp file manager plugin将每个插件的文件夹上传到你的wp-content目录。

请注意,你的WordPress不能自动更新或更新,甚至重新安装你的WordPress。你必须每次都做这些替换。

这是在4.9.8版本的WordPress和最新的5.0.3版本

在5.0.3中,将更多的错误写入error_log.txt文件。未知原因。