禁用 wp-admin 到 wp-login 规范重定向 (wordpress)
disable wp-admin to wp-login canonical redirect (wordpress)
我正在建一个网站,wordpress+buddypress(最新版)。
在这个网站上,我有自己的自定义登录|注册|重置密码表单,我不想link将它们back-end wp-forms.
我已经为所有用户屏蔽了 back-end 表单(默认 wp-login|signup|resetpass 表单)(带有 404 header 代码)
因此,如果您尝试到达 wp-admin/wp-login,您将看到 404。
我不想使用任何类型的重定向
我想停止对特殊 URL 的重定向,停止从那个 URL 到任何其他 URL 的重定向
我想停止从/wp-admin
到/wp-login.php?redirect_to=http%3A%2F%2Fsite.com%2Fwp-admin%2F&reauth=1
[=28的重定向=]
当你试图到达
www.example.com/wp-admin
而您还没有登录,
您将自动重定向到:
example.com/wp-login.php?redirect_to=http%3A%2F%2Fsite.com%2Fwp-admin%2F&reauth=1
您将被重定向...
URL会自动改变
这是wordpress的默认操作。
我想停止自动重定向。
当您尝试访问 /wp-admin 时,您必须停留在 /wp-admin(您不应重定向到 wp-login)。
详情请看这两张图片:
图片1:
图片二:
* 注意:
404 是我造成的...,这不是错误。
我测试了很多代码,以阻止它。但是 none 对我有用。
代码编号 1:
remove_action('template_redirect', 'redirect_canonical');
代码编号 2:
remove_filter('template_redirect', 'redirect_canonical');
代码编号 3:
add_action(
'init',
function () {
remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
}
);
代码编号 4:
function custom_wp_redirect_admin_locations() {
global $wp_rewrite;
if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) )
return;
$admins = array(
home_url( 'wp-admin', 'relative' ),
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $admins ) ) {
$wp_query->set_404();
get_template_part( 404 );
exit();
}
$logins = array(
home_url( 'wp-login.php', 'relative' )
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) {
$wp_query->set_404();
get_template_part( 404 );
exit();
}
}
function remove_default_login_redirect() {
remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
add_action( 'template_redirect', 'custom_wp_redirect_admin_locations', 1000
);
}
add_action('init','remove_default_login_redirect');
代码编号 5 :
add_action(
'template_redirect',
function () {
$requ = untrailingslashit($_SERVER['REQUEST_URI']);
if (site_url('wp-admin', 'relative') ===
untrailingslashit($_SERVER['REQUEST_URI'])) {
remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
}
}
);
代码编号 6:
function custom_wp_redirect_admin_locations() {
global $wp_rewrite;
if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) )
return;
$requested_url = untrailingslashit( $_SERVER['REQUEST_URI'] );
$admins = array(
home_url( 'wp-admin', 'relative' ),
home_url( 'dashboard', 'relative' ),
home_url( 'admin', 'relative' ),
site_url( 'dashboard', 'relative' ),
site_url( 'admin', 'relative' ),
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $admins ) ) {
redirect_canonical( $requested_url , false );
exit;
}
$logins = array(
home_url( 'wp-login.php', 'relative' )
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) {
redirect_canonical( $requested_url , false );
exit;
}
}
function remove_default_login_redirect() {
remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
add_action( 'template_redirect', 'custom_wp_redirect_admin_locations',
1000);
}
add_action('init','remove_default_login_redirect');
无论我使用什么,似乎都没有达到我想要的效果。
我该怎么做?
编辑:澄清上下文,这不是重复的。
link is said as duplicate明确表示他希望他的 wp-login 页面重定向到他自己的 login/registration 页面。
可是我明明说了"Please read the first 16 lines"。
这意味着我不会try/want重定向 + 我不会try/want限制使用任何类型的重定向
另外:在 post阅读本文之前,我已经阅读了所有这些文章。但是其中 none 是我想要的。所以我开始了一个新话题,有完整的细节。
仅供参考,我又阅读了 7 篇文章(我从中挑选了代码):
但是我至少需要10个声望才能post超过2个link!所以我不能说超过 2.
- the second article
- the third article
- the fifth article
非常感谢您的时间和关注,但请多读一遍我的问题。
先-解释。
在管理页面方面,Wordpress 有点棘手。本质上,当加载管理页面时,wp-admin/admin.php
被包含在内。在这个文件中,调用了一个名为 auth_redirect()
的函数,它检查用户是否已登录,如果没有 - 将他重定向到登录页面。
由于此功能不是典型的 action/filter,因此很难禁用它。幸运的是,它自己调用了几个钩子。其中之一 auth_redirect_scheme
在真正的重定向发生之前被调用。它旨在为重定向准备 'scheme' (http/https),但我们可以利用它来满足您的目标。
我为 auth_redirect_scheme
添加了一个过滤器挂钩,优先级为 9999(这并不重要,但我希望它晚点 运行,以防万一)。然后我从原始 auth_redirect()
中提取了一段代码,用于检查用户是否已登录 (wp_validate_auth_cookie
)。如果他是,我们只是 return 值,因为什么都不用做。但是,如果用户未登录,我们会显示一个错误页面并退出脚本(以防止发生重定向)。
此外,以防万一我禁用了 wp_redirect_admin_locations
过滤器。我不太确定是否需要,但是...
现在 - 代码。请注意,这可能不是完美的解决方案,需要您进行一些改进。
<?php
/**
* @packageStop_Redirect
*/
/*
Plugin Name: Stop redirect
Plugin URI:
Description: Stop redirecting anything to wp-login
Author: Tomasz Struczyński
Version: 0.1
Author URI:
*/
add_action('init', 'remove_default_redirect');
add_filter('auth_redirect_scheme', 'stop_redirect', 9999);
function stop_redirect($scheme)
{
if ( $user_id = wp_validate_auth_cookie( '', $scheme) ) {
return $scheme;
}
global $wp_query;
$wp_query->set_404();
get_template_part( 404 );
exit();
}
function remove_default_redirect()
{
remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
}
我正在建一个网站,wordpress+buddypress(最新版)。
在这个网站上,我有自己的自定义登录|注册|重置密码表单,我不想link将它们back-end wp-forms.
我已经为所有用户屏蔽了 back-end 表单(默认 wp-login|signup|resetpass 表单)(带有 404 header 代码)
因此,如果您尝试到达 wp-admin/wp-login,您将看到 404。
我不想使用任何类型的重定向
我想停止对特殊 URL 的重定向,停止从那个 URL 到任何其他 URL 的重定向
我想停止从/wp-admin
到/wp-login.php?redirect_to=http%3A%2F%2Fsite.com%2Fwp-admin%2F&reauth=1
[=28的重定向=]
当你试图到达
www.example.com/wp-admin
而您还没有登录,
您将自动重定向到:
example.com/wp-login.php?redirect_to=http%3A%2F%2Fsite.com%2Fwp-admin%2F&reauth=1
您将被重定向... URL会自动改变 这是wordpress的默认操作。
我想停止自动重定向。
当您尝试访问 /wp-admin 时,您必须停留在 /wp-admin(您不应重定向到 wp-login)。
详情请看这两张图片:
图片1:
图片二:
* 注意:
404 是我造成的...,这不是错误。
我测试了很多代码,以阻止它。但是 none 对我有用。
代码编号 1:
remove_action('template_redirect', 'redirect_canonical');
代码编号 2:
remove_filter('template_redirect', 'redirect_canonical');
代码编号 3:
add_action(
'init',
function () {
remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
}
);
代码编号 4:
function custom_wp_redirect_admin_locations() {
global $wp_rewrite;
if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) )
return;
$admins = array(
home_url( 'wp-admin', 'relative' ),
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $admins ) ) {
$wp_query->set_404();
get_template_part( 404 );
exit();
}
$logins = array(
home_url( 'wp-login.php', 'relative' )
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) {
$wp_query->set_404();
get_template_part( 404 );
exit();
}
}
function remove_default_login_redirect() {
remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
add_action( 'template_redirect', 'custom_wp_redirect_admin_locations', 1000
);
}
add_action('init','remove_default_login_redirect');
代码编号 5 :
add_action(
'template_redirect',
function () {
$requ = untrailingslashit($_SERVER['REQUEST_URI']);
if (site_url('wp-admin', 'relative') ===
untrailingslashit($_SERVER['REQUEST_URI'])) {
remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
}
}
);
代码编号 6:
function custom_wp_redirect_admin_locations() {
global $wp_rewrite;
if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) )
return;
$requested_url = untrailingslashit( $_SERVER['REQUEST_URI'] );
$admins = array(
home_url( 'wp-admin', 'relative' ),
home_url( 'dashboard', 'relative' ),
home_url( 'admin', 'relative' ),
site_url( 'dashboard', 'relative' ),
site_url( 'admin', 'relative' ),
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $admins ) ) {
redirect_canonical( $requested_url , false );
exit;
}
$logins = array(
home_url( 'wp-login.php', 'relative' )
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) {
redirect_canonical( $requested_url , false );
exit;
}
}
function remove_default_login_redirect() {
remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
add_action( 'template_redirect', 'custom_wp_redirect_admin_locations',
1000);
}
add_action('init','remove_default_login_redirect');
无论我使用什么,似乎都没有达到我想要的效果。 我该怎么做?
编辑:澄清上下文,这不是重复的。
link is said as duplicate明确表示他希望他的 wp-login 页面重定向到他自己的 login/registration 页面。
可是我明明说了"Please read the first 16 lines"。 这意味着我不会try/want重定向 + 我不会try/want限制使用任何类型的重定向
另外:在 post阅读本文之前,我已经阅读了所有这些文章。但是其中 none 是我想要的。所以我开始了一个新话题,有完整的细节。
仅供参考,我又阅读了 7 篇文章(我从中挑选了代码):
但是我至少需要10个声望才能post超过2个link!所以我不能说超过 2.
- the second article
- the third article
- the fifth article
非常感谢您的时间和关注,但请多读一遍我的问题。
先-解释。
在管理页面方面,Wordpress 有点棘手。本质上,当加载管理页面时,wp-admin/admin.php
被包含在内。在这个文件中,调用了一个名为 auth_redirect()
的函数,它检查用户是否已登录,如果没有 - 将他重定向到登录页面。
由于此功能不是典型的 action/filter,因此很难禁用它。幸运的是,它自己调用了几个钩子。其中之一 auth_redirect_scheme
在真正的重定向发生之前被调用。它旨在为重定向准备 'scheme' (http/https),但我们可以利用它来满足您的目标。
我为 auth_redirect_scheme
添加了一个过滤器挂钩,优先级为 9999(这并不重要,但我希望它晚点 运行,以防万一)。然后我从原始 auth_redirect()
中提取了一段代码,用于检查用户是否已登录 (wp_validate_auth_cookie
)。如果他是,我们只是 return 值,因为什么都不用做。但是,如果用户未登录,我们会显示一个错误页面并退出脚本(以防止发生重定向)。
此外,以防万一我禁用了 wp_redirect_admin_locations
过滤器。我不太确定是否需要,但是...
现在 - 代码。请注意,这可能不是完美的解决方案,需要您进行一些改进。
<?php
/**
* @packageStop_Redirect
*/
/*
Plugin Name: Stop redirect
Plugin URI:
Description: Stop redirecting anything to wp-login
Author: Tomasz Struczyński
Version: 0.1
Author URI:
*/
add_action('init', 'remove_default_redirect');
add_filter('auth_redirect_scheme', 'stop_redirect', 9999);
function stop_redirect($scheme)
{
if ( $user_id = wp_validate_auth_cookie( '', $scheme) ) {
return $scheme;
}
global $wp_query;
$wp_query->set_404();
get_template_part( 404 );
exit();
}
function remove_default_redirect()
{
remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
}