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

WordPress通过.htaccess添加末尾斜杠出现ERR_TOO_MANY_REDIRECTS错误求助

解决WordPress中.htaccess强制添加末尾斜杠导致的重定向循环问题

你的问题核心是规则顺序冲突和绝对URL协议不匹配引发的循环重定向,以下是具体修复方案:

修复后的.htaccess代码

将强制添加斜杠的规则整合到WordPress的重写块内部,调整顺序和路径写法:

# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /

# Force trailing slash for non-file, non-directory requests
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !^/wp-json/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.(gif|jpg|png|jpeg|css|xml|txt|js|php|scss|webp|mp3|avi|wav|mp4|mov|pdf|html|htm|xst)$ [NC]
RewriteRule ^(.*)$ /$1/ [L,R=301]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

关键调整说明

  1. 规则位置:将强制斜杠规则移到RewriteBase /之后、WordPress主重写规则之前,确保请求被转发到index.php前完成斜杠重定向,避免循环触发
  2. 路径写法:去掉http://%{HTTP_HOST},改用相对路径/$1/,避免HTTPS站点因协议不匹配触发二次重定向
  3. 条件顺序优化:先检查请求方法和URI格式,再排除文件、目录和静态资源,逻辑更高效,减少不必要的条件判断

插件端持久化方案(避免.htaccess被WordPress覆盖)

由于WordPress更新固定链接时会自动覆盖BEGIN WordPress和END WordPress之间的内容,如果你开发的插件需要长期生效,建议通过WordPress过滤器自动注入规则:

add_filter('mod_rewrite_rules', 'plugin_add_trailing_slash_rule');
function plugin_add_trailing_slash_rule($rules) {
    $trailing_slash_rule = <<<EOT

# Force trailing slash for non-file, non-directory requests
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !^/wp-json/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.(gif|jpg|png|jpeg|css|xml|txt|js|php|scss|webp|mp3|avi|wav|mp4|mov|pdf|html|htm|xst)$ [NC]
RewriteRule ^(.*)$ /$1/ [L,R=301]
EOT;
    // 将规则插入到RewriteBase行之后
    $rules = preg_replace('/(RewriteBase \/)/', '$1' . $trailing_slash_rule, $rules);
    return $rules;
}

测试注意事项

  • 清空浏览器缓存后再测试(301重定向会被浏览器永久缓存)
  • 确保站点HTTPS配置正常,避免协议跳转导致的隐性循环

内容的提问来源于stack exchange,提问作者sanjay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:52:35