You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.htaccess中redirect 301生效但RewriteRule规则不生效问题求助

失效原因

  • 规则顺序错误是核心问题。你将自定义RewriteRule放在了WordPress默认路由规则的末尾,WordPress自带规则的最后一行RewriteRule . /index.php [L]带有L标识,匹配成功后会直接终止后续所有规则的执行,因此你写在这行之后的重写规则永远不会被触发。
  • 存在规则被覆盖的隐患。你把自定义规则写在了BEGIN WordPress和END WordPress标记块内部,后续WordPress更新固定链接配置时,会自动覆盖该块内的所有手动修改内容,规则会直接丢失。
  • 规则内的双引号属于冗余写法,虽然不会直接导致失效,但不符合Apache配置规范,建议移除。

解决方法

  1. 调整规则位置,将所有自定义重写规则移动到BEGIN WordPress块之外,且放在WordPress默认规则的前面,修改后的.htaccess参考如下:
# 自定义重写规则(写在BEGIN WordPress块外避免被系统覆盖)
<IfModule mod_rewrite.c>
RewriteEngine On
# 不带查询字符串的重定向规则
RewriteRule ^test/bad-link.*$ http://localhost:8000 [NC,QSD,L,R=301]
# 原有正常生效的301跳转也可放在此处
Redirect 301 /bad-link/ http://localhost:8000/
</IfModule>

# BEGIN WordPress
# Директивы (строки) между `BEGIN WordPress` и `END WordPress`
# созданы автоматически и подлежат изменению только через фильтры WordPress.
# Сделанные вручную изменения между этими маркерами будут перезаписаны.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
  1. 修改配置后清空浏览器缓存再测试,301重定向会被浏览器永久缓存,旧的规则缓存会干扰测试结果。

内容的提问来源于stack exchange,提问作者Мохамед Русланович

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:15:03