function getUrl() {
$url = @( $_SERVER["HTTPS"] != 'on' ) ? 'http://'.$_SERVER["SERVER_NAME"] : 'https://'.$_SERVER["SERVER_NAME"];
$url .= ( $_SERVER["SERVER_PORT"] !== 80 ) ? ":".$_SERVER["SERVER_PORT"] : "";
$url .= $_SERVER["REQUEST_URI"];
return $url;
}
谢谢,非常有用。我找了很久了。:)
请不要抑制错误。尤其是在像这样教育性的网站上!
谢谢,非常方便。
我认为应该使用“不等于”而不是“不全等”($_SERVER[“SERVER_PORT”] != 80)。
耶!成功了!我喜欢它……感谢 CSS-TRICKS
但是应该有 echo getUrl();
为什么需要显示端口号?我删除了这行;
$url .= ( $_SERVER[“SERVER_PORT”] !== 80 ) ? “:”.$_SERVER[“SERVER_PORT”] : “”;
如果 Web 服务器不是在标准端口上访问,则需要在 URL 中包含它才能指向托管 Web 服务器的机器上的正确服务。浏览器和其他 HTTP 客户端几乎都将端口 :80 作为默认值。SSL 客户端几乎都将端口 :443 作为默认值。
也就是说,代码不仅应该检查端口 :80,还应该检查端口 :443 以确定是否省略端口号。按照现在的代码,它会不必要地将端口 :443 添加到所有 SSL 请求中。
感谢提供有用的代码片段!这里有两个评论
代码片段中的所有双引号都可以安全地转换为单引号。这样可以提高性能。
“$_SERVER[“SERVER_PORT”] !== 80” 应该替换为 “$_SERVER[“SERVER_PORT”] != 80”。$_SERVER[“SERVER_PORT”] 的值为字符串,因此它永远不会严格等于 80 的整数。因此,目前,您最终总会将端口号包含在 URL 中。
这是我根据以上所有内容(帖子+评论)编写的版本
欢迎您的评论……
以上代码的一些改进
如果使用 Cloudflare 的灵活 SSL,则此方法不起作用。
要使其工作,您应该添加
谢谢,非常有用。我找了很久了。