这是一个适用于远程和本地服务器的解决方案,不需要更改域名:
$protocol = isset($_SERVER["HTTPS"]) ? 'https://' : 'http://';
$url_base = $protocol . $_SERVER['HTTP_HOST'];
使用这两行代码,如果您更改域名,则无需更改代码,如果您在 HTTP 和 HTTPS 之间切换,也无需更改代码。随意更改您喜欢的变量名称。
因此,您的链接代码将如下所示:
<a href="<?php echo $url_base; ?>/relative/path/to/document.html">link</a>
关于安全的重要更新:
但是,此解决方案存在安全风险。这是一篇关于它的文章。
$_SERVER['HTTP_HOST']
和$_SERVER['SERVER_NAME']
变量可以通过在访问站点时发送不同的 Host 标头来更改:
curl -H "Host: notyourdomain.com" http://yoursite.com/
这样做,任何使用$_SERVER['HTTP_HOST']
或$_SERVER['SERVER_NAME']
将使用 notyourdomain.com 的 URL。
更进一步,假设攻击者使用您的电子邮件填写密码重置表单并更改主机标头。然后,密码重置电子邮件会将您定向到他们的网站。如果您关注域,那很好,但普通用户不会,这就是网络钓鱼攻击起作用的原因。
所以谨慎使用或最好避免使用它。
以下是链接文章中处理多种环境的方法:
在处理多个环境时,您可以使用
$_SERVER['HTTP_HOST']
and $_SERVER['SERVER_NAME']
,但只能检查您所在的域,然后手动设置正确的 URL。您可以使用一组有效域保持简单:
$domains = array('domain.com', 'dev.domain.com', 'staging.domain.com', 'localhost');
if (in_array($_SERVER['HTTP_HOST'], $domains)) {
$domain = $_SERVER['HTTP_HOST'];
}else {
$domain = 'localhost';
}
你也可以让它更短一点:
$domains = array('domain.com', 'dev.domain.com', 'staging.domain.com', 'localhost');
$domain = in_array($_SERVER['HTTP_HOST'], $domains) ? $_SERVER['HTTP_HOST'] : 'localhost';