如何实现用户直接输入URL访问next.php时自动跳转至index.php
PHP实现禁止直接地址栏访问next.php的重定向规则
核心逻辑
区分两类访问场景:
- 合法访问:用户点击index.php内的链接跳转到next.php,允许访问
- 非法访问:用户直接在浏览器地址栏输入next.php地址、通过书签访问next.php,自动重定向到index.php
实现方案1:基于HTTP_REFERER判断(轻量快速)
利用浏览器请求头的Referer字段判断上一跳来源,直接在next.php文件最顶部(前面不能有任何输出、空格、HTML内容)加入以下代码:
<?php // 无Referer代表直接地址栏/书签访问,或者来源不是index.php时触发跳转 if (empty($_SERVER['HTTP_REFERER']) || parse_url($_SERVER['HTTP_REFERER'], PHP_URL_PATH) !== '/index.php') { header("Location: index.php"); exit; // 必须加,终止后续代码执行 } // 下方写next.php原本的业务代码 ?>
注意:HTTP_REFERER可被客户端刻意伪造,该方案仅能拦截普通用户的违规访问,适合对安全性要求不高的场景。
实现方案2:基于Session标记判断(可靠性更高)
不依赖浏览器请求头,通过服务端Session标记授权状态,拦截更稳定。
- 首先修改
index.php,在文件最顶部开启Session并写入授权标记:
<?php session_start(); // 给合法来源用户发放访问next.php的授权标记 $_SESSION['can_visit_next'] = true; ?> <!-- 下方保留index.php原有内容,包括预置的跳转链接 --> <a href="next.php">Click here</a>
- 然后修改
next.php,在文件最顶部加入授权校验逻辑:
<?php session_start(); // 没有授权标记时直接重定向回首页 if (empty($_SESSION['can_visit_next']) || !$_SESSION['can_visit_next']) { header("Location: index.php"); exit; } // 校验通过后立刻清除授权标记,避免用户后续直接输入地址绕过校验 unset($_SESSION['can_visit_next']); // 下方写next.php原本的业务代码 ?>
该方案下,只有正常访问过index.php、点击链接跳转到next.php的用户能通过校验,直接地址栏访问的请求会被直接拦截,不受客户端请求头篡改影响。
内容的提问来源于stack exchange,提问作者Chirag kumar Pipal
相关产品推荐
相关产品推荐

