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
关键调整说明
- 规则位置:将强制斜杠规则移到
RewriteBase /之后、WordPress主重写规则之前,确保请求被转发到index.php前完成斜杠重定向,避免循环触发 - 路径写法:去掉
http://%{HTTP_HOST},改用相对路径/$1/,避免HTTPS站点因协议不匹配触发二次重定向 - 条件顺序优化:先检查请求方法和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
相关产品推荐
相关产品推荐

