如何实现网站指定页面重定向,避免URL自动补全?
解决WordPress中/br路径被自动补全匹配文章的重定向问题
问题背景
删除了为网站添加/br/路径的插件后,设置重定向规则去除URL中的/br/以兼容旧链接,但访问www.twodogs.com/br或www.twodogs.com/br/时,WordPress会自动将其补全为以br开头的博客文章(例如跳转至https://twodogs.com/brasil-caiu-16-posicoes-no-ranking-global-da-felicidade/),现有代码无法拦截该自动补全行为。
现有代码问题
原代码使用template_redirect钩子,而WordPress负责自动补全URL的redirect_canonical钩子会在其之前触发,导致重定向逻辑还未执行就已经跳转到匹配文章;同时仅匹配包含/br/的路径,无法处理/br(无结尾斜杠)的请求。
修改后的解决方案
替换原有代码为以下内容,通过更早的钩子拦截请求,并覆盖所有/br和/br/开头的路径:
function corrigir_redirecionamento_br() { $request_uri = $_SERVER['REQUEST_URI']; // 匹配以/br或/br/开头的所有请求路径 if (preg_match('#^/br(/.*)?$#', $request_uri)) { // 移除开头的/br或/br/前缀 $url_corrigida = preg_replace('#^/br/?#', '/', $request_uri); // 301永久重定向到修正后的URL wp_redirect(home_url($url_corrigida), 301); exit(); } } // 使用init钩子,早于WordPress的自动补全跳转触发 add_action('init', 'corrigir_redirecionamento_br');
补充:若自动补全仍触发的处理
如果上述代码仍无法阻止自动补全,可以临时在匹配路径时禁用WordPress的规范URL跳转功能:
function corrigir_redirecionamento_br() { $request_uri = $_SERVER['REQUEST_URI']; if (preg_match('#^/br(/.*)?$#', $request_uri)) { // 临时禁用规范URL自动补全 remove_action('template_redirect', 'redirect_canonical'); $url_corrigida = preg_replace('#^/br/?#', '/', $request_uri); wp_redirect(home_url($url_corrigida), 301); exit(); } } add_action('init', 'corrigir_redirecionamento_br');
内容的提问来源于stack exchange,提问作者Mateus Cardoso
相关产品推荐
相关产品推荐

