之前我们介绍过如何将WordPress安装到子目录并提到过WP Super Cache的CDN面板下Off-site URL选项可以设置URL重写,如果我们的网站并非安装在网站根目录而是安装在子目录,这个URL重写也可以帮助我们有效隐藏WordPress安装目录的文件夹名,避免某些闲得无聊的人通过查看源代码知道网站文件的位置,进而对我们的网站进行暴力破解。

虽然重写后的URL隐藏了我们网站文件的路径,但是这种隐藏方式对于访客直接通过“域名+wp-admin”的方式直接访问WordPress默认登录窗口是无效的,比如说:我将WordPress的所有程序放在了网站根目录下的一个名为wordpress的文件夹下,如果我仅仅使用了WP Super Cache的CDN功能重写了资源的URL,当我访问“blog.quietguoguo.com/wp-admin”时,网页会自动跳转到“blog.quietguoguo.com/wordpress/wp-admin”下,这样WordPress的默认登录界面就会暴露出来,而我的管理路径也会暴露出来,这样无疑是不安全的,那么该如何隐藏网站的管理路径呢?下面就将我从网上搜集并整理的方法分享给大家。

修改wp-config.php文件

首先,在更改WordPress管理路径之前我们需要先想出一个新的路径名称用来替换“/wp-admin/”,比如我这里使用的“/My-admin/”;然后我们需要在WordPress的配置文件wp-config.php中增加一些常量,具体代码如下:

//WordPress隐藏管理路径
define('WP_ADMIN_DIR','My-admin'); 
define('ADMIN_COOKIE_PATH', SITECOOKIEPATH . WP_ADMIN_DIR);

更改完wp-config.php之后,我们需要修改一下主题文件夹下的functions.php文件,由于各个主题的functions文件命名不一样,大家可以根据自己主题选择相应的文件。在functions.php中添加一个filter,具体代码如下:

//WordPress隐藏管理路径
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);
  }

修改Rewrite规则

修改完以上内容后我们需要修改下网站的Rewrite规则来将WordPress的管理路径由”/wp-admin/”重定向到我们新的管理路径”/My-admin/”上去。

Apache用户需要在WordPress安装目录下的.htaccess文件中添加如下代码:

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

Nginx用户需要在virtual host文件中添加如下代码:

location ~* /My-admin/ {
rewrite ^/My-admin/(.*) /wp-admin/$1 last;
}

好了,如果不出意外的话,进行到这里你的网站应该就可以通过“域名+/My-admin/“来访问WordPress默认的登陆页面进而管理网站后台了。如果你将WordPress安装到了子目录中,则访问路径为”域名+/WordPress安装目录/My-admin/”。

注意:如果你在上面Rewrite规则中自定义的路径名“My-admin”后面添加了“/”则访问时必须带上“/”;如果“My-admin”后没有带上“/”,则访问“My-admin”与“My-admin/”是一样的。而且有一个小问题是如果你访问的路径后面没有“/”当你进入后台选择其他选项时会报错,而如果My-admin后面有“/”时不会报错。

这个问题目前我还没想到好的办法解决,姑且留待日后补充吧。

重定向wp-admin

修改完上述内容后我们可以通过新的访问路径管理后台,但是你会发现原有的wp-admin路径依旧起作用,这显然不是我们所希望的,下面我们就通过代码来将默认的管理路径重定向到一个其他的页面。值得注意的是,这次我们需要将代码添加到我们所使用主题的functions.php中去。

add_action('login_form','redirect_wp_admin');
    function redirect_wp_admin(){
        $redirect_to = $_SERVER['REQUEST_URI'];
        if(count($_REQUEST)> 0 && array_key_exists('redirect_to', $_REQUEST)){
          $redirect_to = $_REQUEST['redirect_to'];
          $check_wp_admin = stristr($redirect_to, 'wp-admin');
            if($check_wp_admin){
                wp_safe_redirect( '404.html' );
            }
        }
    }

当然,这里你可以把重定向的“404.html”换成其它静态文件。这个404.html的文件应当是放在你WordPress的安装文件夹下的。

好了,具体的内容就这些。