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

PHP中无需传递参数获取HTTP 301重定向源URL的方法

实现重定向来源检测并执行脚本的方案

无需传递参数的可行方法

1. 利用HTTP Referer请求头

浏览器在常规重定向场景下(除隐私模式、跨域严格限制等特殊情况),会将来源域名存入Referer请求头传递给主域名服务器,你可以通过前后端两种方式处理:

  • 后端检测(更可靠)
    在主域名的后端服务(如Nginx、Apache或业务代码)中检查Referer头,若包含testredirect.com,则向页面注入执行脚本的逻辑。
    Nginx配置示例:

    server {
      listen 443 ssl;
      server_name www.test.com;
    
      location / {
        if ($http_referer ~* "testredirect\.com") {
          # 直接在响应末尾插入脚本
          sub_filter '</body>' '<script>console.log("来自testredirect的重定向,执行脚本"); // 替换为你的业务逻辑</script></body>';
          sub_filter_once on;
        }
        # 其他原有配置
      }
    }
    

    Node.js后端示例:

    app.get('*', (req, res) => {
      const referer = req.get('Referer');
      let injectScript = '';
      if (referer && referer.includes('testredirect.com')) {
        injectScript = '<script>// 这里写你的脚本逻辑alert("来自重定向的访问");</script>';
      }
      const pageHtml = `
        <!DOCTYPE html>
        <html>
          <body>
            <!-- 页面原有内容 -->
            ${injectScript}
          </body>
        </html>
      `;
      res.send(pageHtml);
    });
    
  • 前端检测(有局限性)
    在主域名的前端脚本中读取document.referrer,判断是否包含目标来源域名,满足条件则执行脚本:

    window.addEventListener('load', () => {
      const referrer = document.referrer;
      if (referrer.includes('testredirect.com')) {
        // 执行你的脚本逻辑
        console.log('来自testredirect的重定向,运行指定脚本');
      }
    });
    

    注意:隐私模式或部分跨域场景下,浏览器会屏蔽Referer头,导致检测失效。

2. 利用Cookie标记(稳定性更高)

在重定向域名(www.testredirect.com)的服务器上先设置一个共享Cookie,再跳转至主域名,主域名通过检测该Cookie触发脚本执行:

  • 重定向域名的Nginx配置示例:
    server {
      listen 443 ssl;
      server_name www.testredirect.com;
    
      location / {
        # 设置主域名可访问的Cookie
        add_header Set-Cookie "redirect_source=testredirect; Domain=.test.com; Path=/; Secure; HttpOnly";
        return 302 https://www.test.com$request_uri;
      }
    }
    
  • 主域名前端检测Cookie的脚本:
    function getCookie(name) {
      const value = `; ${document.cookie}`;
      const parts = value.split(`; ${name}=`);
      if (parts.length === 2) return parts.pop().split(';').shift();
    }
    
    window.addEventListener('load', () => {
      const source = getCookie('redirect_source');
      if (source === 'testredirect') {
        // 执行脚本逻辑
        console.log('来自testredirect的重定向');
        // 可选:执行后删除Cookie,避免下次误触发
        document.cookie = 'redirect_source=; Domain=.test.com; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT';
      }
    });
    
    这种方法不受Referer屏蔽影响,但要求两个域名共享父域名(如.test.com),否则无法跨域读取Cookie。

注意事项

  • 若两个域名完全独立(无共同父域名),Cookie方案不可用,只能依赖Referer头。
  • 确保使用3xx类型的HTTP跳转(如301、302),而非前端JS跳转,否则Referer或Cookie的传递逻辑可能异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:55:13