WordPress站点.htaccess中重定向与RewriteRule的放置位置及问题排查
旧Drupal站点到新WordPress站点的301重定向配置问题
一、自定义重定向规则的位置要求
所有自定义重定向规则(包括跨域名跳转的RewriteRule)必须放在WordPress自动生成的指令之前。原因是WordPress核心规则会将所有请求重写到index.php处理,若自定义规则放在WordPress指令之后,请求会先被WordPress接管,自定义规则根本不会触发。
针对跨域名跳转的RewriteRule,建议放在现有单个检测重定向规则之前,这样先统一完成域名跳转,再处理路径层面的定向,逻辑更清晰。
另外,你提供的原始跨域名规则存在语法错误,修正后的正确写法如下:
RewriteCond %{HTTP_HOST} ^(?:www\.)old\.example$ [NC] RewriteRule ^(.*)$ https://www.newexample.org/$1 [L,R=301]
二、测试异常的原因分析
你更新后的.htaccess中,开头的规则:
RewriteCond %{HTTP_HOST} ^(www\.)?newexample\.org [NC] RewriteRule ^ - [S=52]
作用是:当请求域名是newexample.org(含www前缀)时,跳过后续52条规则。这就导致你测试newexample.org/test/detail/factor-v-leiden-f5-targeted-testing时,所有单个检测的重定向规则都被直接跳过,请求没有被重定向,直接进入WordPress核心规则处理。而WordPress站点中没有对应该路径的内容,因此返回“Post not found”错误。
三、验证结果
经调整测试方法(修改RewriteCond为其他域名并注释通配符规则)后,规则可正常生效。
内容的提问来源于stack exchange,提问作者banacan
相关产品推荐
相关产品推荐

