更改WordPress管理员URL

23

我对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目录。然后我有一个包含核心WP文件的wordpress目录,不包括wp-content文件夹。

有了这个新结构,我必须使用此网址访问WP后端:http://site.dev/wordpress/wp-admin

有没有办法我可以更改它,以便我只需访问: http://site.dev/wp-admin

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


2
这更适合于WordPress开发网站:http://wordpress.stackexchange.com/ - Giacomo1968
6个回答

31

以下是WordPress官网上的一篇文章。

如何将管理员URL或wp-admin更改为安全登录

  1. Add constant to wp-config.php

    define('WP_ADMIN_DIR', 'secret-folder');  
    define( 'ADMIN_COOKIE_PATH', SITECOOKIEPATH . WP_ADMIN_DIR);  
    
  2. Add below filter to 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. Add below line to .htaccess file

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

6
如果你从默认URL转发用户到新的管理URL,那么更改管理员URL的意义是什么?如果使用步骤2中的功能,增加安全性通过切换默认管理员URL的整个意义就消失了。 - Stellan Lindell
3
为什么你在我回答了原帖后给我投了反对票?我只是引用了 Wordpress 网站上的文章。 - jbrahy
5
也许不完全是关于安全性的问题,也许我想使用“admin”代替“wp-admin”,因为我的客户要求我这么做。jbrahy是正确的,他给出了正确的答案。 - dev_masta
1
但是@StellanLindell提到的安全性问题也应该在答案中提到。所以这个评论在这里实际上是有意义的! :) - Tarvo Mäesepp

5

我尝试了一下,发现有一种更简单的方法可以在这个简单的函数中完成所有操作,而不必再处理其他任何内容(创建不必要的文件夹、重定向、页面等)。

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

有一个适用于Joomla的插件可以实现这个功能。我不知道为什么没有可用的插件可以做到这一点。 - distante
你能否举个例子来解释一下? - Ankit Agrawal

2

这是非常有用的主题。我在函数中进行了一些小的更正,以下是我的版本:

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

1
我所做的只是将/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更改一些代码,因为插件不能满足我的需求。

1

最终找到了一种方法,可以在不使用插件且无需修改WP核心的情况下完成(所有教程都建议这样做,原因很奇怪)。

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调用,请告诉我您是否尝试过。


0

有一种方法可以确保更好的安全策略来保护您的wp-admin。

除了将自己的wp-admin名称命名为"worksersneeded/"之外,还有另一种方法。

我在我的一个网站上这样做了,结果是奇迹般的,探测到的SSL网站从不同的地理位置显示出与我的网站不同的内容。

您需要下载一个名为Notepad ++的工具: https://notepad-plus-plus.org/download/

除非您要在目录中的每个文件上进行大量工作。

然后,您需要将WordPress解压缩到一个文件夹中。

然后,在搜索wp-admin时编辑目录中的所有文件。然后用您自己的名称"workersneeded"或其他名称替换所有文件。

例如,在记事本中输入"搜索文件"以查找内容:"wp-admin/"

并在"替换为"中输入:"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文件中。

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

您可以再次使用notepad++下载插件并执行与上述相同的过程。这样,您就可以通过新的文件夹名称使所有插件可用。

然后,使用wp文件管理器插件将每个插件文件夹上传到wp-content目录中。

请注意,您的WordPress无法进行自动更新或更新,即使重新安装WordPress也是如此。您必须每次进行这些替换。

这是在4.9.8版本和最新的5.0.3版本的WordPress中完成的。

在5.0.3中,您会在error_log.txt文件中获得更多错误。原因未知。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接