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

如何在test.php中获取跳转来源页面的完整URL?

可以实现!这里有几种可靠的方法帮你搞定

首先得说,你遇到的$_SERVER['HTTP_REFERER']失效问题太常见了——这个值完全依赖浏览器主动发送,很多场景下它都会丢失:比如浏览器开启隐私模式、用户直接通过书签/地址栏访问、HTTPS页面跳转到HTTP页面,甚至有些浏览器插件会主动屏蔽这个字段。所以靠它确实不稳定,得换更可靠的方式。

下面给你几个可行的方案,按需选择就行:

方案1:通过URL参数传递(最简单直接)

在「页面#1」的按钮链接里,直接把当前页面的完整URL作为参数传过去:

<!-- 页面#1的按钮代码 -->
<a href="/test.php?from=<?php echo urlencode('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); ?>" class="button">跳转至test.php</a>

然后在test.php里,读取这个参数并输出:

// test.php代码
<?php
if(isset($_GET['from'])){
    // 用htmlspecialchars防止XSS攻击
    echo '跳转来源:' . htmlspecialchars(urldecode($_GET['from']));
} else {
    echo '未检测到来源页面';
}
?>

这种方法的好处是简单,不需要依赖Session,缺点是来源URL会暴露在地址栏里。

方案2:用Session存储来源(适合不想暴露URL的场景)

如果不想在地址栏显示来源信息,可以用PHP的Session来存储:
首先在「页面#1」的顶部开启Session并保存当前URL:

<!-- 页面#1的顶部代码 -->
<?php
session_start();
// 保存完整的来源URL
$protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://';
$_SESSION['referrer_url'] = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
?>

然后按钮正常跳转:

<a href="/test.php" class="button">跳转至test.php</a>

最后在test.php里读取Session的值:

// test.php代码
<?php
session_start();
if(isset($_SESSION['referrer_url'])){
    echo '跳转来源:' . htmlspecialchars($_SESSION['referrer_url']);
    // 可选:用完后清除这个Session值,避免后续请求重复显示
    unset($_SESSION['referrer_url']);
} else {
    echo '未检测到来源页面';
}
?>

这种方法更隐蔽,但要确保用户浏览器支持Cookie(Session依赖Cookie)。

方案3:表单隐藏字段(如果按钮是表单提交的情况)

如果你的按钮是表单的提交按钮,可以在表单里加一个隐藏字段来传递来源URL:

<!-- 页面#1的表单代码 -->
<form action="/test.php" method="post">
    <?php
    $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://';
    $fullUrl = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    ?>
    <input type="hidden" name="from" value="<?php echo urlencode($fullUrl); ?>">
    <button type="submit">提交并跳转</button>
</form>

然后在test.php里读取POST参数:

// test.php代码
<?php
if(isset($_POST['from'])){
    echo '跳转来源:' . htmlspecialchars(urldecode($_POST['from']));
} else {
    echo '未检测到来源页面';
}
?>

关键注意事项

  • 不管用哪种方法,输出的时候一定要用htmlspecialchars()处理,防止XSS攻击,避免恶意代码注入。
  • 代码里的$protocol判断可以自动适配HTTP/HTTPS环境,避免硬写协议导致的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:02:56