构建自引用 URL 的最可靠、最通用的方法是什么?换句话说,我想生成用户浏览器正在点击的 URL 的http://www.site.com[:port]部分。我正在使用在 Apache 下运行的 PHP。
一些并发症:
依赖 $_SERVER["HTTP_HOST"] 是危险的,因为这似乎直接来自 HTTP Host 标头,有人可以伪造。
可能有也可能没有虚拟主机。
可能有一个使用 Apache 的 Port 指令指定的端口,但如果它位于负载平衡器或代理之后,则该端口可能不是用户指定的端口。
该端口实际上可能不是 URL 的一部分。例如,通常省略 80 和 443。
PHP 的 $_SERVER["HTTPS"] 并不总是提供可靠的值,尤其是当您使用负载平衡器或代理时。
Apache 有一个 UseCanonicalName 指令,它会影响 SERVER_NAME 和 SERVER_PORT 环境变量的值。如果有帮助,我们可以假设它已打开。