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

通过.htaccess重写页面URL后PHP GET变量无法正常取值问题求助

解决方案

问题根源

  • .htaccess重写规则未配置QSA标志,导致原始URL携带的查询参数b_year被丢弃,没有传递到入口index.php
  • 路由处理代码存在语法错误,判断逻辑的括号未正确配对
  • JS拼接URL时多写了多余的&符号,虽不影响主流浏览器解析但不符合URL规范
  • 目标页面直接读取$_GET['b_year']未做存在性判断,触发PHP Notice提示

修复步骤

1. 修改.htaccess重写规则

添加QSA(查询字符串追加)标志和L(停止后续重写)标志,保证原始参数能传递到入口文件:

RewriteRule ^([\w-]+([^/]))$ index.php?rute=$1 [QSA,L]

2. 修复路由处理PHP代码

先修正语法错误,同时添加路由白名单避免文件包含安全风险:

if (isset($_GET["rute"])) {
    // 路由白名单,仅允许指定路径访问
    $allowRoutes = [
        'budget_by_mi'
    ];
    if (in_array($_GET["rute"], $allowRoutes)) {
        include "modules/".$_GET["rute"].".php";
    } else {
        include "modules/404.php";
    }
} else {
    include "modules/404.php";
}

3. 修正JS传参代码

删除URL中多余的&符号:

$('body').on('click','#by_mi',function openWin(){
    var b_year = document.getElementById('budget_year').value;
    var url = "/ahlain_new/budget_by_mi?b_year=" + b_year;
    myWindow = window.open(url);
});

4. 优化目标页面参数读取逻辑

添加参数存在性判断,避免未传参时抛出Notice:

<?php
$b_year = isset($_GET['b_year']) ? $_GET['b_year'] : '未传入年份参数';
echo $b_year;
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:21:03