更改 Wordpress 管理员 URL

Posted

技术标签:

【中文标题】更改 Wordpress 管理员 URL【英文标题】:Change Wordpress Admin URL 【发布时间】:2014-07-28 06:10:24 【问题描述】:

我改变了我的 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 文件夹。

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

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

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

【问题讨论】:

这个更适合WordPress开发站点:wordpress.stackexchange.com 【参考方案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]
    

【讨论】:

如果您将用户从默认的管理 URL 转发到新的管理 URL,那么更改管理 URL 的意义何在?如果您使用上面第 2 步中的功能,那么通过切换默认管理 URL 来提高安全性的全部意义就消失了。 当我回答 OP 时,你为什么要对我投反对票?我刚刚引用了 Wordpress 网站上的文章。 @StellanLindell 也许不仅仅是安全问题,也许我想使用“admin”而不是“wp-admin”,因为客户希望我这样做。 jbrahy是对的,他答对了。【参考方案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');

【讨论】:

有一个 Joomla 插件可以做到这一点。我不知道为什么没有可用的插件可以做到这一点。 你能不能举个例子解释一下。请【参考方案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 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 调用是否适用于上述方法,如果您尝试过,请告诉我

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

还有另一种方法可以确保为您的安全 wp-admin 提供更好的策略。

也许有自己的 wp-admin 名称:“worksersneeded/”

我对我的一个站点进行了此操作,结果奇迹般地发现,被探测的 SSL 站点从不同地理位置向我的站点显示的结果不同。

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

除非您要对目录中的每个文件做大量工作。

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

然后在搜索 wp-admin 的同时编辑目录中的所有文件。 然后用你的名字替换所有文件:“workersneeded”或你自己的名字。

像在记事本中输入“在文件中搜索”来“查找内容”:wp-admin/

在“替换为”:workerneeded/

然后替换所有文件。

您还需要将这一行放入 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 版本的 WordPress 以及最新的 5.0.3 完成的

在 5.0.3 中,error_log.txt 文件中会出现更多错误。不知道为什么。

【讨论】:

以上是关于更改 Wordpress 管理员 URL的主要内容,如果未能解决你的问题,请参考以下文章

更改WordPress管理和登录页面徽标

更改Wordpress管理徽标

php 更改Wordpress管理员登录页面

PHP 更改WordPress管理员和登录页面徽标

WordPress管理员ID自动更改。我能做什么?

更改管理员页脚中的WordPress版本