Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 写入不包含协议的链接_Php_Html_Hyperlink_Protocols - Fatal编程技术网

Php 写入不包含协议的链接

Php 写入不包含协议的链接,php,html,hyperlink,protocols,Php,Html,Hyperlink,Protocols,我有一个网站,可以在http和https协议中查看,这里的问题是链接和资产必须反映网站正在查看的协议 一个解决方案是使用相对链接,但由于特殊原因,我不能使用相对链接,结果,我不得不找到一个替代方案 我最近了解到,为了使用当前协议,您可以编写这样的链接: <a href="//www.example.net/test/">Test</a> 而不是 http://beta.example.net/venue/ 为什么会这样?这是因为我使用的链接吗 我的原始(PHP)解决方

我有一个网站,可以在
http
https
协议中查看,这里的问题是链接和资产必须反映网站正在查看的协议

一个解决方案是使用相对链接,但由于特殊原因,我不能使用相对链接,结果,我不得不找到一个替代方案

我最近了解到,为了使用当前协议,您可以编写这样的链接:

<a href="//www.example.net/test/">Test</a>
而不是

http://beta.example.net/venue/
为什么会这样?这是因为我使用的链接吗

我的原始(PHP)解决方案更好吗?尽管有大量代码可以使用?

你可以在任何你想使用常规URL的地方使用“//example.net”,这是一种符合标准§4.2的格式。RFC 3986


但是,如果仍然希望以干净的方式更改URL的方案,可以使用
http\u build\u URL

像这样:

http_build_url("http://yoururl.org", array('scheme'=>'https')); // changes to https://

站点地图中的错误链接是因为生成器错误。最好的解决方案是更新站点地图生成器,使其正常工作。简单的解决方案是使用$protocol。

您没有提供代码来重现您描述的问题,这些链接显示了额外的斜杠。我猜您正在使用的代码试图组装整个URI,并且在连接的部分中有尾随/前导斜杠

$_SERVER['HTTPS']变量不能保证设置为“on”,只是为了让您了解定义的行为。它只是被设置为一个非false值,但在这里提供的代码中,这不应该是一个问题

使用与协议相关的URL肯定比让PHP为每个请求重新构建URI做额外的工作更可取,而且容易出错。我建议在您认为需要的地方使用协议相关URL,但一般来说,建议您从头开始构建站点,使用HTTPS或不使用HTTPS。协议相关URL仍然可能导致某些浏览器(例如IE)发出警告或通知用户页面的SSL已断开


当您需要安全传输时,您希望始终检查这些内容并彻底测试它们。很容易无意中插入一个或无意中通过HTTP而不是HTTPS发送一个AJAX请求,突然该页面的SLL图标在用户浏览器中被破坏。

最好使用“//example.net/test”。甚至谷歌的CDN也使用这种格式,所以你可以确定它能在所有浏览器中工作。你的php解决方案有什么问题?我唯一要更改的是将
协议存储为常量而不是变量,这样您就可以跨站点的不同范围使用它,这样定义(“协议”,$\u服务器[“HTTPS”]=“on”?“HTTPS”:“http”)
@YaronUliel我的PHP解决方案没有问题,但是HTML解决方案更简单,需要的代码更少。我不想为我网站中的每个链接都编写
echo$\u协议
!!关于使用常量的建议是好的,尽管如此+1:-)我认为你在悄悄地夸大了实现它所需的代码量-这并不是说你不需要编写链接。是的,我完全同意你的观点,基于客户端的解决方案(如果它符合你的要求的话)会更好。我只是告诉你如何以一种简单的方式改变方案,比做一个简单的工作要省力。你可以使用“//example.net”很好,谢谢你,请你修改你的答案,加入关于
//example.net
的信息,因为这是我感兴趣的:-)编辑由网站地图生成的URL不是问题,我需要一秒钟。我只是想知道使用
PHP
还是使用HTML方法更好?产生wierd链接的代码就在那里<代码>`就这么简单。站点地图生成器很可能已损坏。我不认为服务器变量是可靠的,这也是我问这个问题的原因之一,代码本身不会导致您描述的结果,不。您的问题可能在其他地方表现出来。请自己尝试,转到并输入带有这些链接的url!这也可能与
.htaccess
重写有关。我不知道您正在使用某些第三方工具生成这些URL,问题中也没有提到这一点。我的假设是您使用的是上面演示的PHP代码,它不会重现这个问题。我也看不出使用您提供的链接是如何产生问题的。因此,没有足够的信息让我重现这个问题并帮助您调试它。别担心,我不需要调试它,我只是想确保生成坏链接的不是我的页面,这似乎是事实,所以我不担心:-)
http://beta.example.net/venue/
http_build_url("http://yoururl.org", array('scheme'=>'https')); // changes to https://