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

PHP路由开发遇$_GET无返回问题:.htaccess配置后无法获取参数

解决PHP路由中$_GET变量未定义的问题

看起来你的路由重写规则没正常生效,导致$_GET['controller']和$_GET['action']出现未定义索引错误,var_dump($_GET)返回空数组。我来帮你一步步排查解决:

1. 先确认Apache的mod_rewrite模块是否启用

这是重写规则生效的核心前提,很多新手容易忽略这一步:

  • 打开Apache的配置文件(通常是httpd.conf),检查是否有LoadModule rewrite_module modules/mod_rewrite.so这一行,并且没有被注释掉(行首没有#)。
  • 找到你的站点目录对应的<Directory>配置块,确保设置了AllowOverride All(不要是AllowOverride None),这样Apache才会读取.htaccess文件中的规则。

修改完配置后记得重启Apache服务。

2. 修复.htaccess中的实体编码错误

你的重写规则里用了&amp;,这是HTML实体编码,但.htaccess是Apache的配置文件,不需要这种编码,直接用普通的&即可。错误的编码会导致参数无法正确拆分,最终$_GET里没有预期的键。

修改后的.htaccess内容应该是:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controller=$1&action=$2&id=$3 [NC,L]

3. 测试重写规则是否生效

现在访问http://localhost/Test/View/123,然后在index.php中执行var_dump($_GET),正常情况下应该输出:

array(3) {
  ["controller"]=>
  string(4) "Test"
  ["action"]=>
  string(4) "View"
  ["id"]=>
  string(3) "123"
}

4. 处理默认值避免未定义索引错误

当你访问根目录http://localhost/时,controller和action会是空字符串,这时候可以在index.php中设置默认值,防止报错:

// PHP 7及以上版本推荐用空合并运算符
$controller = $_GET['controller'] ?? 'Home';
$action = $_GET['action'] ?? 'index';

// 如果是PHP 5.x版本,用isset判断
// $controller = isset($_GET['controller']) ? $_GET['controller'] : 'Home';
// $action = isset($_GET['action']) ? $_GET['action'] : 'index';

这样就能确保即使没有传入controller或action,也不会出现未定义索引的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:51:12