我已经试图解决这个问题好几个月了,我找到的每个解决方案都不能正常工作或者很容易通过。
规则:
我尝试过的事情&失败(可能做错了)或想到尝试:
复制粘贴&重命名wp-login.php,然后使用wp_login和wp_login_url在这个文件中进行所有这些操作 - 不确定其他WP功能是否需要" wp-login.php"正常工作
为functions.php创建一个函数,检查"秘密字符串"被添加到URL的末尾,重定向其他人或显示404
只是普通的重定向
尝试了不同的插件
阅读&尝试在线发现至少50个.htaccess代码(不是开玩笑)
我遇到的问题:
普通重定向:无法登录或注销
所有插件的工作方式:只隐藏wp-login.php,你仍然可以使用login,admin& wp-admin
.htaccess结果:添加"链接"只重定向到wp-login.php,但无论如何都不能隐藏它,更改它或用新的"链接替换wp-login"在网址
几乎有效:
//Don't Let Users To Login Page
function example_simple_query_string_protection_for_login_page() {
//Secret string
$QS = '?secret=1';
$theRequest = 'https://' . $_SERVER['SERVER_NAME'] . '/' . 'wp-login.php' . '?'. $_SERVER['QUERY_STRING'];
if ( site_url('/wp-login.php').$QS == $theRequest ) {
//Shows WP login page
}
else {
//Redirects to home page
header( 'Location: https://' . $_SERVER['SERVER_NAME'] . '/' );
//Shows 404 - Doesn't work as expected!!
//include( get_query_template( '404' ) );
}
}
add_action('login_head', 'example_simple_query_string_protection_for_login_page');
问题:
我的代码可以解决这个问题,但由于某种原因无效:
//Disable wp-admin For Non-Admins If Not Running AJAX Or Updating User Data
function disable_wp_admin_for_non_admins() {
if ( !current_user_can('manage_options') && $_SERVER['DOING_AJAX'] != '/wp-admin/admin-ajax.php' && !ajax_add_remove_favorites() && !ajax_update_user_profile_function() ) {
wp_redirect( home_url() );
exit;
}
}
add_action('admin_init', 'disable_wp_admin_for_non_admins');
答案 0 :(得分:1)
最近我不得不在另一个项目上抛出404错误。不确定包装它的最佳过滤器/操作,但我使用了parse_request
。
add_action('parse_request', 'prevent_wp_login_access');
function prevent_wp_login_access()
{
global $wp_query;
//check to see if the page is wp-login.php
//if so
//force 404
$wp_query->set_404();
status_header(404);
require TEMPLATEPATH.'/404.php';
exit;
}
您还可以尝试将其包裹在init
操作中,如果header()
对象尚不可用,则抛出您自己的$wp_query
。
只是一个想法。
答案 1 :(得分:0)
我已经测试了以下内容,以防止访问wp-login.php。它也考虑了注销,所以不应该给你一个问题。不确定它是否能与WP的其他方面很好地配合。
add_action('init', 'prevent_wp_login_access');
function prevent_wp_login_access()
{
global $pagenow;
if( isset($_GET['action']) && $_GET['action'] == 'logout' )
return;
if( 'wp-login.php' == $pagenow ) {
wp_redirect( get_option('siteurl') );
exit;
}
}