📜  在 php 中获取带有协议的站点 url(1)

📅  最后修改于: 2023-12-03 14:51:04.360000             🧑  作者: Mango

在 PHP 中获取带有协议的站点 URL

在 Web 开发中,我们经常需要获取当前网站的 URL。在 PHP 中,我们可以使用多种方法来获取当前网站 URL,但是很多方法都不能返回完整的 URL(包括协议)。

以下是获取带有协议的站点 URL 的几种方法:

1. 使用全局变量 $_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。

2. 使用函数 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。
3. 使用函数 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 的三种方法,可以根据实际情况选择使用。