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

.htaccess外部与内部重写冲突:URL重定向触发过多重定向错误

解决.htaccess URL重写时的无限重定向问题

我来帮你分析下问题所在,你遇到的「Too many redirects」错误本质是规则顺序和匹配逻辑的循环触发导致的:

你的现有规则是先处理内部重写(把/page/xxx转成index.php?p=xxx),再处理外部重定向(把?p=xxx转成/page/xxx)。但当用户访问?p=page1时,流程变成了:

  1. 触发重定向规则,把URL跳转到/page/page1
  2. 内部重写规则把/page/page1转成index.php?p=page1
  3. 这时候服务器内部处理的请求又带上了p=page1的查询字符串,会再次触发第二步的重定向规则,无限循环下去

修正后的.htaccess配置

# 先处理外部重定向:仅当请求不是/page/开头时,才把?p=xxx跳转到/page/xxx
RewriteCond %{REQUEST_URI} !^/page/ [NC]
RewriteCond %{QUERY_STRING} ^p=(.*)$ [NC]
RewriteRule ^ /page/%1? [R=301,L,NE,QSD,NC]

# 再处理内部重写:把/page/xxx转成index.php?p=xxx
RewriteRule ^page/(.*)$ index.php?p=$1 [L,QSA,NC]

关键调整点说明

  • 规则顺序调换:先做外部重定向,再做内部重写,避免重写后的请求再次触发重定向
  • 新增排除条件:RewriteCond %{REQUEST_URI} !^/page/ [NC] 确保已经是/page/路径的请求不会进入重定向规则,从根源上切断循环
  • 简化内部重写条件:原来的RewriteCond %{REQUEST_URI} /page/(.*)其实是多余的,因为RewriteRule本身已经匹配了^page/(.*)$路径,直接保留规则体即可

这样调整后,不管用户访问?p=page1还是/page/page1,都能正常工作,不会出现无限重定向的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:13:04