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

已解决:自定义添加URL重写规则与获取GET字符串问题

解决Clean URLs配置下无法获取GET参数的问题

我之前在做SEO优化、配置简洁URL(clean URLs)的时候,也踩过完全一样的坑——页面能正常加载,但就是拿不到GET请求的参数,原来的代码看着能跑,但其实藏着逻辑错误。折腾了一阵调整代码后,终于完美解决了这个问题,分享下我的处理过程:

问题场景

当我们把动态URL(比如/product?id=123)改成更友好的clean URL(比如/product/123)后,发现通过$_GET['id'](以PHP为例)根本获取不到参数值,甚至$_GET数组是空的,但页面本身没有报错,这就是典型的URL重写后参数传递的问题。

原有错误代码示例(以Apache的.htaccess为例)

原来的重写规则可能是这样的,看起来能把URL转成动态路径,但其实没处理参数传递:

RewriteEngine On
RewriteRule ^product/([0-9]+)$ product.php [L]

这个规则确实能把/product/123指向product.php,但它没有把捕获到的123传递成GET参数,也没保留原本可能存在的其他GET参数(比如/product/123?utm_source=blog这类带追踪参数的情况)。

调整后的正确代码

修改重写规则,加上QSA(Query String Append)标志,并且把捕获的参数传递给处理脚本:

RewriteEngine On
RewriteRule ^product/([0-9]+)$ product.php?id=$1 [QSA,L]
  • $1对应正则里捕获的([0-9]+),也就是我们要的ID值,这样product.php里就能通过$_GET['id']拿到123了
  • QSA标志的作用是保留原本URL里的其他查询参数,比如用户访问/product/123?utm_source=blog,重写后会变成product.php?id=123&utm_source=blog,所有参数都能正常获取

如果是Nginx环境,对应的配置调整也类似,把重写规则改成:

location /product {
    rewrite ^/product/([0-9]+)$ /product.php?id=$1 last;
}

同样要确保参数被正确传递到处理脚本里。

验证方法

调整完配置后,重启Web服务器,然后:

  • 访问/product/456,在product.php里用var_dump($_GET)查看,应该能看到array(1) { ["id"]=> string(3) "456" }
  • 访问/product/456?test=abc,应该能看到array(2) { ["id"]=> string(3) "456" ["test"]=> string(3) "abc" },说明QSA生效了

这样调整后,既实现了SEO友好的clean URLs,又能正常获取所有GET参数,完美解决了之前的问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:37:51