我在自定义页面上有一个自定义登录表单,用于处理所有登录/注销。该表单根据需要发布到wp-login.php。
<form name="loginform-custom" id="loginform-custom" action="http://localhost/wp-login.php" method="post">
所有无效的登录尝试都由functions.php文件中的以下脚本处理:
/**
* Redirect user on invalid log-in attempts
*/
function login_failed() {
wp_redirect( home_url('/access-denied') );
exit;
}
add_action( 'wp_login_failed', 'login_failed' );
function verify_username_password( $user, $username, $password ) {
if( $username == "" || $password == "" ) {
wp_redirect( home_url('/access-denied') );
exit;
}
}
我在functions.php文件中使用以下脚本将所有非管理员从wp-admin重定向到404页面。
function restrict_admin_with_redirect() {
if ( ! current_user_can( 'manage_options' ) && ( ! wp_doing_ajax() ) ) {
wp_redirect( site_url('/404') );
exit;
}
}
add_action( 'admin_init', 'restrict_admin_with_redirect', 1 );
然而,这是我的问题。当非用户(随机访问者)尝试访问wp-admin时,尽管重定向脚本为404,但他们将被带到拒绝访问页面。出于某种原因,每当有人试图访问wp-admin时,服务器将其视为日志 - 尝试,当他们(当然)被拒绝登录时,他们被重定向到访问被拒绝页面。
当用户访问wp-admin时,有什么方法可以强制使用404吗?此外,我喜欢真正的404而不是重定向到404页面(这不是真正的404)。
思想?
有没有办法在尝试访问wp-admin时强迫任何人(用户和非用户)加入404?在上面的操作脚本中,即使我将非管理员重定向到404.php页面,非用户仍然会被发送到标准访问权限
答案 0 :(得分:0)
考虑来自Ragu.cz的这个解决方案。
https://wordpress.org/support/topic/make-wp-admin-throw-a-404-page-or-something/#post-8565864
add_action( 'init', 'force_404', 1 );
function force_404() {
$requested_uri = $_SERVER["REQUEST_URI"];
do_action('debugger_var_dump', $requested_uri, '$requested_uri', 0, 0);
do_action('debugger_var_dump', strpos( $requested_uri, '/wp-login.php'), 'FOUND?', 0, 0);
if ( strpos( $requested_uri, '/wp-login.php') !== false ) {
do_action('debugger_var_dump', 'REDIRECT', 'REDIRECT', 0, 0);
// The redirect codebase
status_header( 404 );
nocache_headers();
include( get_query_template( '404' ) );
die();
}
if ( strpos( $requested_uri, '/wp-login.php') !== false || strpos( $requested_uri, '/wp-register.php') !== false ) {
do_action('debugger_var_dump', 'REDIRECT', 'REDIRECT', 0, 0);
// The redirect codebase
status_header( 404 );
nocache_headers();
include( get_query_template( '404' ) );
die();
}
if ( strpos( $requested_uri, '/wp-admin') !== false && !is_super_admin() ) {
do_action('debugger_var_dump', 'REDIRECT', 'REDIRECT', 0, 0);
// The redirect codebase
status_header( 404 );
nocache_headers();
include( get_query_template( '404' ) );
die();
}
do_action('debugger_var_dump', 'END', 'END', 0, 0);
}