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

Nginx Rewrite参数传递至PHP失效问题求助

解决Nginx Rewrite后PHP无法获取查询参数的问题

你遇到的问题核心是PHP不会自动将URL查询参数注册为全局变量——早年的register_globals选项早已被废弃(严重不安全),所以直接调用$redirect_reference肯定拿不到值。

第一步:修正PHP参数获取逻辑

把你的PHP代码改成用$_GET超全局数组获取参数:

<?php
echo $_GET['redirect_reference'] . "\r\n";

第二步:结合短链接需求完善逻辑

针对你的短链接跳转场景,这里给你一套完整的示例代码,包含格式验证、数据库查询和跳转逻辑:

<?php
// 获取短码,为空则直接跳主页
$shortCode = $_GET['redirect_reference'] ?? '';

// 验证短码格式(只允许数字和字母,避免恶意请求)
if (preg_match('/^[0-9A-Za-z]+$/', $shortCode)) {
    // 这里替换成你的数据库查询逻辑
    // 示例:从数据库中根据短码查询目标链接
    // $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'user', 'pass');
    // $stmt = $pdo->prepare('SELECT target_url FROM short_links WHERE code = ?');
    // $stmt->execute([$shortCode]);
    // $targetUrl = $stmt->fetchColumn();

    // 假设查询到了有效链接,执行跳转
    if (!empty($targetUrl)) {
        header("Location: $targetUrl");
        exit;
    }
}

// 无效短码/未查到链接/恶意请求,统一跳主页
header("Location: https://www.example.com");
exit;

第三步:检查Nginx配置的正确性

确保你的rewrite规则配置正确,且没有被其他location规则干扰,完整的server配置示例:

server {
    server_name redirect.example.com;
    root /path/to/your/webroot; # 替换成你的项目根目录

    location / {
        # 匹配短码格式的URL,重写到index.php并传递参数
        rewrite ^/([0-9A-Za-z]*)$ /index.php?redirect_reference=$1 last;
    }

    # 处理PHP请求的location,确保fastcgi参数正确传递
    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 根据你的PHP版本和FPM配置调整
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

注意:rewrite规则后的last参数很重要,它会让Nginx重新匹配新的URL(也就是index.php),确保PHP能接收到查询参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:33:18