.htaccess规则导致$_GET无法取值的问题求助
解决.htaccess RewriteRule无法传递$_GET['id']的问题
看起来你遇到的是URL重写规则不生效的典型新手问题,我来一步步帮你排查和解决:
先确认几个核心前提
mod_rewrite模块是否启用:这是最容易忽略的关键点!你可以创建一个
phpinfo.php文件,内容如下:<?php phpinfo(); ?>访问这个文件后,搜索
mod_rewrite,如果找不到相关条目,说明模块没启用。需要去Apache的配置文件(比如httpd.conf)里去掉#LoadModule rewrite_module modules/mod_rewrite.so前面的注释,然后重启Apache服务。.htaccess的位置是否正确:必须把
.htaccess放在和display.php同一级的网站根目录下,要是放在子目录里,路径匹配逻辑会直接失效。Apache是否允许.htaccess覆盖配置:打开Apache的主配置文件或者虚拟主机配置,找到你的网站根目录对应的
<Directory>块,确保AllowOverride设置为All(至少是FileInfo,因为Rewrite规则属于FileInfo类指令)。比如:<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>修改后记得重启Apache服务。
优化你的Rewrite规则
我建议你把.htaccess的内容改成下面这样,补充必要的配置项:
RewriteEngine On # 设置重写基准路径,如果你的网站在子目录(比如/blog),就改成RewriteBase /blog/ RewriteBase / # 仅当请求的不是真实文件/目录时才执行重写,避免干扰真实存在的资源 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 匹配display/数字的格式,末尾斜杠可选(加/?),[L]表示这是最后一条规则,[QSA]保留原查询字符串 RewriteRule ^display/([0-9]+)/?$ display.php?id=$1 [L,QSA]
最后测试的注意事项
- 修改完
.htaccess和Apache配置后,务必重启Apache服务,然后清除浏览器缓存(或者用隐私窗口访问),避免旧缓存影响测试结果。 - 现在访问
http://你的域名/display/1,应该就能正常获取$_GET['id']的值了。上面的规则还支持带斜杠的display/1/格式,适配更多访问场景。
如果还是不行,可以查看Apache的错误日志(通常在/var/log/apache2/error.log或类似路径),里面会有具体的重写错误信息,能帮你进一步定位问题。
内容的提问来源于stack exchange,提问作者Advay Ratan
相关产品推荐
相关产品推荐

