如何在PHP中获取.htaccess重写后的浏览器显示URL
获取Apache重写后浏览器显示的URI
当使用.htaccess重写URL后,$_SERVER["REQUEST_URI"]返回的是实际处理请求的文件路径(比如page.php),你可以通过以下几种方式获取浏览器地址栏显示的原始URI:
方法1:使用$_SERVER['REDIRECT_URL']
Apache在执行重写规则后,会自动生成REDIRECT_URL环境变量,它存储的就是浏览器发起请求的原始路径(即你需要的/page/some-page/)。直接读取这个变量即可:
$browserUri = $_SERVER['REDIRECT_URL'] ?? ''; // 输出示例:/page/some-page/ echo $browserUri;
方法2:在.htaccess中手动传递原始URI
如果REDIRECT_URL不可用(比如服务器配置限制),可以在重写规则里添加环境变量标记,强制保存原始请求路径:
在你的.htaccess中修改重写规则:
RewriteEngine On RewriteRule ^page/some-page/$ page.php [QSA,E=ORIG_URI:%{REQUEST_URI}]
然后在PHP中读取自定义的环境变量:
$browserUri = $_SERVER['ORIG_URI'] ?? '';
方法3:备选方案(可靠性较低)
如果请求是从站内跳转而来,$_SERVER['HTTP_REFERER']可能包含之前的浏览器地址,但该头部可能被浏览器禁用或为空(比如用户直接输入地址时),仅作为临时备选:
$browserUri = $_SERVER['HTTP_REFERER'] ?? ''; // 注意:需要从完整URL中提取路径部分,可结合parse_url处理 $parsed = parse_url($browserUri); $path = $parsed['path'] ?? '';
注意事项
- 确保服务器已启用
mod_rewrite模块,且.htaccess文件的重写规则配置正确。 - 不同服务器环境下环境变量的可用性可能有差异,优先使用方法1。
内容的提问来源于stack exchange,提问作者GunJack
相关产品推荐
相关产品推荐

