如何隐藏Referrer中的URL参数,使来源地址不含参数
问题
我需要对来源Referrer进行微调,当前实现方式如下:
在.htaccess文件中配置:
RewriteEngine On RewriteRule ^/?[\w]{10}$ https://audiobookscloud.com/bayg45xx2ds/?target=https://whatsmyreferer.com/ [L,NC]
在文章页面中使用以下代码:
<?php if($_GET['target']) { ?> <meta name="referrer" content="unsafe-url"> <meta http-equiv="REFRESH" content="0;URL=<?php echo $_GET['target'];?>"> <?php } ?>
但实际生成的Referrer为:https://audiobookscloud.com/bayg45xx2ds/?target=https://whatsmyreferer.com/
我需要Referrer完全显示为:https://audiobookscloud.com/bayg45xx2ds/
请问是否可以隐藏URL参数?该如何实现?
解决方案
可以实现隐藏URL参数,让Referrer仅显示不含参数的基础地址,具体修改如下:
1. 更新.htaccess重写规则
把目标地址通过环境变量传递,而非URL查询参数,确保重写后的页面URL不带任何参数:
RewriteEngine On # 匹配10位字符的访问路径,将目标地址存入环境变量TARGET_URL,并重写到目标页面 RewriteRule ^/?[\w]{10}$ https://audiobookscloud.com/bayg45xx2ds/ [E=TARGET_URL:https://whatsmyreferer.com/,L,NC]
这里的E=TARGET_URL:...会把目标地址存入服务器环境变量,供PHP读取,同时重写后的页面URL是纯净的https://audiobookscloud.com/bayg45xx2ds/,不带任何查询参数。
2. 修改PHP页面跳转逻辑
不再从$_GET获取目标地址,而是读取环境变量,同时保持跳转的Referrer设置:
<?php $target = getenv('TARGET_URL'); if($target) { ?> <meta name="referrer" content="unsafe-url"> <meta http-equiv="REFRESH" content="0;URL=<?php echo htmlspecialchars($target);?>"> <?php } ?>
这样当页面执行跳转时,当前页面的URL是不带参数的https://audiobookscloud.com/bayg45xx2ds/,生成的Referrer就是这个纯净地址,完全符合需求。
备选方案(环境变量不可用时)
如果服务器环境无法读取环境变量,可通过Cookie传递参数,修改.htaccess如下:
RewriteEngine On RewriteRule ^/?[\w]{10}$ https://audiobookscloud.com/bayg45xx2ds/ [CO=target:https://whatsmyreferer.com/:audiobookscloud.com:3600:/,L,NC]
然后PHP里读取Cookie值即可:
<?php if(isset($_COOKIE['target'])) { ?> <meta name="referrer" content="unsafe-url"> <meta http-equiv="REFRESH" content="0;URL=<?php echo htmlspecialchars($_COOKIE['target']);?>"> <?php } ?>
内容的提问来源于Stack Exchange,提问作者Prinple Vrlo
相关产品推荐
相关产品推荐

