📅  最后修改于: 2023-12-03 14:51:04.360000             🧑  作者: Mango
在 Web 开发中,我们经常需要获取当前网站的 URL。在 PHP 中,我们可以使用多种方法来获取当前网站 URL,但是很多方法都不能返回完整的 URL(包括协议)。
以下是获取带有协议的站点 URL 的几种方法:
$_SERVER
PHP 中的 $_SERVER
是一个包含了诸如头信息、路径以及脚本位置等等信息的数组。我们可以使用此全局变量来获取当前站点 URL。
$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$_SERVER['HTTPS']
:判断当前站点是否使用 HTTPS 协议。$_SERVER['HTTP_HOST']
:获取当前站点的主机名。$_SERVER['REQUEST_URI']
:获取当前页面的 URI(不包括主机名)。以上代码将会返回完整的带有协议的站点 URL。
parse_url
和 $_SERVER
另一种方法是使用 PHP 中的 parse_url
和 $_SERVER
函数。这种方法需要将当前站点的 URL 保存在一个变量上。
$current_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https://" : "http://") . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
$parsed_url = parse_url($current_url);
$site_url = $parsed_url['scheme'] . '://' . $parsed_url['host'];
$current_url
:保存当前站点的 URL。$parsed_url
:用 parse_url
解析当前站点的 URL。$site_url
:获取带有协议的站点 URL。getenv
如果 Apache 配置中启用了 mod_rewrite
,那么 $_SERVER['HTTP_HOST']
和 $_SERVER['REQUEST_URI']
可能会返回带有重写后缀的 URL,从而导致获取到的 URL 不完整。这时,我们可以使用 getenv
函数来获取当前站点的 URL。
$site_url = getenv('HTTP_HOST') ? : getenv('SERVER_NAME');
$site_protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' || $site_port == 443) ? "https://" : "http://";
$url = $site_protocol . $site_url;
$site_url
:使用 getenv
函数获取当前站点的 URL。$site_protocol
:获取当前站点的协议。$url
:返回完整的带有协议的站点 URL。以上是获取带有协议的站点 URL 的三种方法,可以根据实际情况选择使用。