配置.htaccess实现URL美化后$_GET['id']取值为空如何解决
问题排查与解决方法
核心原因(90%以上概率)
你遇到的问题是Apache默认开启的MultiViews(内容协商)特性导致的:
MultiViews开启时,当服务器收到/blog/1的请求,会自动查找路径前缀匹配的同名脚本blog.php,直接将请求转发给该脚本,完全跳过你写的RewriteRule规则,自然不会携带id参数,所以$_GET['id']返回空。
修复步骤
- 修改你的
.htaccess配置,关闭MultiViews,同时可额外增加QSA标志兼容后续参数传递:
Options +FollowSymLinks -MultiViews RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^blog/([a-zA-Z0-9]+)$ blog.php?id=$1 [NC,L,QSA]
- 重启Apache服务后再次测试即可。
可选验证手段
如果修改后仍有问题,可以在blog.php开头加入以下代码确认请求状态:
<?php var_dump($_SERVER['REQUEST_URI']); // 确认是否为 /blog/xxx 格式的访问路径 var_dump($_SERVER['QUERY_STRING']); // 确认是否存在 id=xxx 的查询字符串 var_dump($_GET); ?>
可以直接在浏览器访问http://localhost/blog/1测试,不需要走PHP跳转逻辑,先排除跳转环节的变量赋值错误问题。
内容的提问来源于stack exchange,提问作者Oyyou
相关产品推荐
相关产品推荐

