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

如何配置.htaccess隐藏/error_pages路径解决重定向死循环问题

解决方案

核心问题原因

死循环来自两个配置错误:

  1. cPanel配置的ErrorDocument使用了完整HTTP URL,会触发外部3xx跳转,错误发生时浏览器地址栏直接变为/error_pages/xxx,触发后续重写规则。
  2. 原有内部重写规则使用[L]标志仅终止当前轮次重写,Apache会重新发起重写流程,形成循环。

完整正确的.htaccess配置

# 错误文档配置:使用内部短路径,不触发外部跳转
ErrorDocument 400 /400
ErrorDocument 401 /401
ErrorDocument 403 /403
ErrorDocument 404 /404
ErrorDocument 503 /503

Options -Indexes
RewriteEngine On
RewriteBase /

# 强制HTTPS跳转,优先级最高
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

# 规则1:直接访问带/error_pages/前缀的路径时,301跳转到短路径
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+error_pages/([^\s]+) [NC]
RewriteRule ^ /%1 [R=301,L,NE]

# 规则2:内部重写短路径到/error_pages/目录,END标志终止所有重写流程(Apache 2.4+支持,当前主流主机均兼容)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /error_pages/$1 [END,NC]

兼容Apache 2.2的替代方案

如果你的主机环境为Apache 2.2不支持END标志,将规则2替换为以下内容即可:

# Apache 2.2 兼容规则,通过REDIRECT_STATUS判断避免重复重写
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /error_pages/$1 [L,NC]

注意事项

  1. 配置修改后请清空浏览器缓存(301跳转为永久缓存,可使用隐私模式测试避免旧缓存影响)。
  2. 请确保/error_pages/目录下存在对应名称的错误页文件,若你的文件带后缀(如404.html),可同步修改ErrorDocument和重写规则补充后缀即可。
  3. 配置完成后效果:
  • 访问example.com/404地址栏不变,直接展示/error_pages/404内容
  • 直接访问/error_pages/404会自动跳转到短路径
  • 触发错误时地址栏保留用户原访问路径,不会跳转至带error_pages的路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:24:03