WordPress wp_redirect 在我阅读之前清除 $_SERVER['REQUEST_URI']
WordPress wp_redirect clearing $_SERVER['REQUEST_URI'] before I can read it
如果 AJAX 没有请求,我需要将我的 WordPress 网站上的所有流量重定向到主页,但我需要在重定向后使用请求的路径。
我通过 wp_redirect php 和 template_redirect 挂钩进行重定向,但是我无法读取 REQUEST_URI 以通过 cookie 或 [=48 保存它=] 或任何东西。
一旦 wp_redirect 被调用,它似乎阻止我阅读请求的详细信息,预重定向。注释掉 wp_redirect,它看起来很好。
有没有我遗漏的东西,或者更好的方法?我有一个通过 AJAX.
加载内容的单页网站
add_action('template_redirect', 'pass_along_request_uri', 1);
function pass_along_request_uri() {
// $_SERVER['REQUEST_URI'] is the path as expected only if the future wp_redirect is not called...
}
add_action('template_redirect', 'redirect_to_homepage', 10);
function redirect_to_homepage() {
if (!is_front_page() && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')) {
wp_redirect(home_url(), 301);
exit;
}
}
编辑;
只有 2 个函数用于测试,因为记录 $_SERVER['REQUEST_URI'] 对我来说没有意义。考虑如果我将日志置于优先级 1,则应该在使用优先级 10 函数进行重定向之前记录它。
然而事实并非如此。不管何时何地看起来,调用wp_redirect似乎清除了原始请求数据。
function console_log($output, $with_script_tags = true) {
$js_code = 'console.log(' . json_encode($output, JSON_HEX_TAG) .
');';
if ($with_script_tags) {
$js_code = '<script>' . $js_code . '</script>';
}
echo $js_code;
}
console_log($_SERVER['REQUEST_URI']);
日志在不调用 wp_redirect 时显示“/path/to/page”,一旦 wp_redirect 在链中,它只会吐出“/”(重定向路径)。
我认为这与 add_action 的操作排队方式有关?不幸的是,我不太了解 WordPress。
谢谢!
你这里的错误是你实际记录的方式。
console.log(...)
在客户端执行 - 但它 无法 在您在其他地方进行重定向时记录(您无法为浏览器发送输出像您的脚本元素一样解释 和 同时重定向。)
您看到的是相同日志记录代码的结果,在重定向后通过请求执行。
实现您想要的最简单方法可能是将 REQUEST_URI 值粘贴到会话中。为此,您可能必须启动一个,因为默认情况下 WP 不使用“传统”会话。
如果 AJAX 没有请求,我需要将我的 WordPress 网站上的所有流量重定向到主页,但我需要在重定向后使用请求的路径。
我通过 wp_redirect php 和 template_redirect 挂钩进行重定向,但是我无法读取 REQUEST_URI 以通过 cookie 或 [=48 保存它=] 或任何东西。
一旦 wp_redirect 被调用,它似乎阻止我阅读请求的详细信息,预重定向。注释掉 wp_redirect,它看起来很好。
有没有我遗漏的东西,或者更好的方法?我有一个通过 AJAX.
加载内容的单页网站add_action('template_redirect', 'pass_along_request_uri', 1);
function pass_along_request_uri() {
// $_SERVER['REQUEST_URI'] is the path as expected only if the future wp_redirect is not called...
}
add_action('template_redirect', 'redirect_to_homepage', 10);
function redirect_to_homepage() {
if (!is_front_page() && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')) {
wp_redirect(home_url(), 301);
exit;
}
}
编辑; 只有 2 个函数用于测试,因为记录 $_SERVER['REQUEST_URI'] 对我来说没有意义。考虑如果我将日志置于优先级 1,则应该在使用优先级 10 函数进行重定向之前记录它。
然而事实并非如此。不管何时何地看起来,调用wp_redirect似乎清除了原始请求数据。
function console_log($output, $with_script_tags = true) {
$js_code = 'console.log(' . json_encode($output, JSON_HEX_TAG) .
');';
if ($with_script_tags) {
$js_code = '<script>' . $js_code . '</script>';
}
echo $js_code;
}
console_log($_SERVER['REQUEST_URI']);
日志在不调用 wp_redirect 时显示“/path/to/page”,一旦 wp_redirect 在链中,它只会吐出“/”(重定向路径)。
我认为这与 add_action 的操作排队方式有关?不幸的是,我不太了解 WordPress。
谢谢!
你这里的错误是你实际记录的方式。
console.log(...)
在客户端执行 - 但它 无法 在您在其他地方进行重定向时记录(您无法为浏览器发送输出像您的脚本元素一样解释 和 同时重定向。)
您看到的是相同日志记录代码的结果,在重定向后通过请求执行。
实现您想要的最简单方法可能是将 REQUEST_URI 值粘贴到会话中。为此,您可能必须启动一个,因为默认情况下 WP 不使用“传统”会话。