PHP使用$_GET获取URL参数后如何隐藏或编码URL路径?
实现方案
完全可以实现,根据你的场景需求,推荐两种落地路径:
方案1:随机映射码方案(无敏感参数暴露,推荐)
核心思路是把原始参数和随机无意义字符串做数据库映射,二维码直接使用带随机串的URL,全程不会暴露原始参数值:
- 第一步:新建参数映射表,核心字段为
random_code(长度自定义的随机大小写字母+数字串,无业务含义)、origin_no(存储原始的no参数值,如CN - 005),可按需增加过期时间、访问次数限制等字段。 - 第二步:生成二维码时,先将需要传递的
no参数写入映射表,生成对应的随机串,二维码内容直接使用http://10.1.6.8/[生成的随机串]。 - 第三步:配置
.htaccess重写规则,将所有非文件/非目录的路径请求转发到入口文件处理:RewriteEngine On # 排除真实存在的文件、目录,避免静态资源被拦截 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 把路径中的随机串作为code参数传给index.php RewriteRule ^([a-zA-Z0-9]+)$ index.php?code=$1 [L] - 第四步:PHP中通过
$_GET['code']读取随机串,查询映射表拿到原始no参数,执行业务逻辑。如果需要最终地址显示为纯根域名,可以有两种处理:- 业务逻辑执行完成后,将结果存入
$_SESSION,返回302响应头header('Location: /');跳转到根路径,根路径的逻辑直接读SESSION渲染内容即可 - 前端返回的页面中加入JS代码,无刷新修改地址栏:
window.history.replaceState(null, document.title, '/');
- 业务逻辑执行完成后,将结果存入
方案2:参数加密+前端地址替换(无需修改数据库,轻量实现)
如果不想额外维护映射表,可以用对称加密隐藏参数值,配合前端API修改地址栏实现隐藏效果:
- 第一步:生成二维码前,将原始
no参数用AES等对称加密算法加密,生成无意义的加密串,直接把加密串作为路径拼接在URL后,二维码使用该URL - 第二步:
.htaccess重写规则和方案1一致,把路径中的加密串传给PHP处理 - 第三步:PHP拿到加密串后解密得到原始
no值,执行业务逻辑,返回页面时带上JS替换地址栏的代码即可,最终地址栏会显示为纯根域名
常见问题说明
你之前用.htaccess修改路径后参数仍然暴露,是因为没有做参数的映射/加密处理,只是把参数从query部分移到了路径部分,原始业务值仍然是明文展示,用上述两种方案都可以解决该问题。
内容的提问来源于stack exchange,提问作者Tachin
相关产品推荐
相关产品推荐

