WordPress add_rewrite_rule重定向错误:域名前多斜杠、后缀带[QSA,L]
问题原因
你错误地将重写规则的flag参数写入了add_rewrite_rule的第二个参数(目标地址位):
- WordPress的
add_rewrite_rule不会识别写在目标地址后的方括号内容,这部分内容会直接被拼接到跳转URL末尾,导致出现多余的[QSA,L] - 同时WordPress会默认给非标准内部重写路径前自动补全斜杠,导致域名前多出额外的
/
解决方法
方法1:用template_redirect实现(更稳妥,无需刷新重写规则)
直接在请求处理阶段判断路径并跳转,不会触发重写规则的自动拼接逻辑:
add_action( 'template_redirect', 'mdv_custom_redirect' ); function mdv_custom_redirect() { if ( preg_match( '#^demo/(.+)$#', $_SERVER['REQUEST_URI'], $matches ) ) { $redirect_url = esc_url_raw( 'https://example.com/' . $matches[1] ); wp_redirect( $redirect_url, 301 ); exit; } }
方法2:修正add_rewrite_rule参数写法
将flag参数放到函数的第三个参数位,第二个参数仅保留目标地址:
add_action( 'init', 'mdv_add_rule' ); function mdv_add_rule() { add_rewrite_rule( 'demo/(.+)$', 'https://example.com/$1', 'R=301,L' ); }
修改后需要进入WordPress后台「设置」-「固定链接」,直接点击「保存设置」,刷新重写规则缓存后生效。
内容的提问来源于stack exchange,提问作者Duc Phuli
相关产品推荐
相关产品推荐

