通过.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
相关产品推荐
相关产品推荐

