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

PHP非根URL重定向到根目录遇循环问题求助

问题出在逻辑运算符的错误使用!

哦,这个陷阱太容易踩了!你的代码里的条件判断逻辑有问题,导致无论当前请求的URI是什么,这个条件都会成立,所以浏览器会一直被重定向到根路径,形成无限循环。

为什么会循环?

看你的判断条件:

if (($_SERVER["REQUEST_URI"] != "/") || ($_SERVER["REQUEST_URI"] != ""))

逻辑或(||)的规则是只要其中一个条件为真,整个表达式就为真。我们来拆解两种关键情况:

  • 当请求URI是/时:第一个条件!= "/"为假,但第二个条件!= ""为真(因为/不等于空字符串),所以整个条件为真,执行重定向。
  • 当请求URI是空字符串时:第一个条件!= "/"为真,第二个条件为假,整个条件还是为真,执行重定向。
  • 其他任何非根路径的URI,两个条件至少一个为真,自然也会触发重定向。

这样一来,哪怕用户已经在根路径,代码还是会强制重定向到根,浏览器就陷入了循环。

修复方案

把逻辑或(||)改成逻辑与(&&),这样只有当URI既不是/也不是空字符串的时候,才执行重定向:

if ($_SERVER["REQUEST_URI"] != "/" && $_SERVER["REQUEST_URI"] != "") {
    header('Location: /');
    die();
}

额外补充

有些服务器环境下,$_SERVER["REQUEST_URI"]可能不会是空字符串(比如Apache默认会把根请求的URI设为/),所以你甚至可以简化成只判断是否不等于/:

if ($_SERVER["REQUEST_URI"] != "/") {
    header('Location: /');
    die();
}

不过保留空字符串的判断也没坏处,能兼容一些特殊的服务器配置。

另外,记得在header()函数里添加状态码,根据你的需求选择永久重定向(适合SEO)或临时重定向,比如:

header('Location: /', true, 301); // 永久重定向
// 或者
header('Location: /', true, 302); // 临时重定向
die();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:25:37