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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:05:10