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

设置定时重定向至过期页却触发无限重定向循环问题求助

解决Apache Rewrite无限重定向循环问题

嘿,我来帮你拆解问题出在哪,以及怎么修复:

核心问题:排除条件的正则匹配错误

你陷入无限循环的根本原因是第二个RewriteCond的正则写得不对,导致过期页面本身也被触发了重定向。

  • Apache的%{REQUEST_URI}变量值始终是以/开头的,比如用户访问过期页面时,这个变量的值是/en-gb/expired。
  • 你当前的排除条件是%{REQUEST_URI} !en-gb/expired$ [NC],这个正则是检查字符串末尾是否为en-gb/expired,但实际REQUEST_URI是/en-gb/expired,前面多了个/,所以这个正则根本匹配不上过期页面的路径。
  • 结果就是:哪怕用户已经访问了/en-gb/expired,排除条件依然成立,RewriteRule会再次把它重定向到同一个页面,无限循环就这么产生了。

次要问题:目标URL的拼写笔误

你提到的目标URL是https://mywebsite.com/en-gb/exipred,但RewriteRule里写的是/en-gb/expired——这里有个拼写错误(exipred vs expired),虽然这不是循环的直接原因,但会导致用户被重定向到不存在的页面,得注意修正。

修正后的配置

把排除条件的正则改成精准匹配过期页面的完整路径,同时建议测试阶段用R=302临时重定向(避免浏览器缓存301永久重定向导致测试不生效):

# 时间条件:当当前时间晚于2019-04-18 15:40时触发
RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY}%{TIME_HOUR}%{TIME_MIN} >201904181540 [NC]
# 精准排除过期页面,确保它不会被重定向
RewriteCond %{REQUEST_URI} !^/en-gb/expired$ [NC]
# 重定向所有其他请求到过期页面
RewriteRule ^(.*)$ /en-gb/expired [L,R=302]

为什么修改RewriteRule为^/$或^$无效?

这两个正则只能匹配网站根路径(也就是https://mywebsite.com/),像/en-gb、/en-gb/home这些子路径根本不会被匹配到,所以重定向规则自然就被忽略了,达不到你全站重定向的需求。

额外建议

等你确认配置正常工作后,再把R=302改成R=301永久重定向,这样搜索引擎也会更新索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:17:23