修改Wordpress后台登录地址增加安全性
很多博主都设置了登录才能评论的功能,这样一来就必须允许用户注册,很多博主会认为游客和管理员共用一个登录地址会造成安全问题,或者单纯就是为了管理员单独开启一个登录入口。
关注这个问题,百度找到的答案最多的就是修改wp-login.php和general-template.php,对于很对用户很不方便,并且一旦程序更新又要重新修改。下面就介绍一种不用修改文件,单纯通过钩子实现的方法。
效果:只能通过自定义的地址登录wp,原wp-login.php返回404。
首先,通过login_url修改wp_login_url()函数返回的登录地址。
该函数被很多主题调用以跳转到登录页;通过logout_url修改wp_logout_url()函数返回的登录地址。
login_url过滤器包含三个参数,$login_url,$redirect,$force_reauth,其中
- $login_url(必须),登录用的自定义url,例如http://example.com/my-login-page,默认wp-login.php
- $redirect(可选) 登录成功后重定向的地址,默认无。
- $force_reauth(布尔值,可选),如果为true,无论cookie什么值,都强制重新认证。
add_filter( 'login_url', 'my_login_page', 10, 3 );
function my_login_page( $login_url, $redirect, $force_reauth ) {
return home_url( '/my-login-page/?redirect_to=' . $redirect );
}
通过以上代码,登录地址则变为/my-login-page
logout_url过滤器需要两个参数,$logout_url和$redirect
- $logout_url登出wordpress的url,也就是后台右上角的“登录”的url
- $redirect 成功登出后跳转到的地址
add_filter( 'logout_url', 'my_logout_page', 10, 2 );
function my_logout_page( $logout_url, $redirect ) {
return home_url( '/my-logout-page/?redirect_to=' . $redirect );
}
通过以上代码,登出url更改为/my-logout-page
注:通常情况下,我们不会为登录和登出设定两个url,而是通过类似 /my-login-page?action=logout实现登出功能。
第二步,让wp-login.php返回404。
这里需要用到wp_init钩子,判断请求的url是否wp-login.php,如果是,则redirect到404地址。
add_action('login_enqueue_scripts','wp_login_php_404');
function wp_login_php_404(){
$request = parse_url($_SERVER["REQUEST_URI"]);
if($request['path'] == '/wp-login.php' && str_pos(wp_get_refer(),home_url( '/my-logout-page' )) !==0 ){
wp_safe_redirect(home_url('/404'));
}
第三步,根目录新建my-login-page,内容只需一行。
require_once('wp-login.php');
其实第三步还有一种是实现方式是类似于第二步的,通过wp_init判断请求地址,如果是my-login-page,则require wp-login.php,可以避免手动新建my-login-page文件。
通过以上三步就完成了wordpress登录地址的自定义。