关于此功能:
function requireSSL() {
if($_SERVER['SERVER_PORT'] != 443) {
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://" . $_SERVER['HTTP_HOST'] .$_SERVER['REQUEST_URI']);
exit;
}
return false;
}
SSL需要端口443,所以在这段代码中如果不是443那么强制使用https?如果443它将自动使用https我假设。什么是永久使用的移动?
代码header("Location: .");
上面有什么用,它只不过是告诉它保持同一页面。默认情况下它应该保持在同一页面,不是多余的吗?
答案 0 :(得分:2)
SSL需要端口443
并非总是如此。那是默认端口。 HTTPS可以配置为在其他端口上运行。更好的检查方法是:
if ( !isset($_SERVER['HTTPS']) || strtolower($_SERVER['HTTPS']) != 'on') {
}
永久使用的移动是什么?
来自w3:
已为所请求的资源分配了一个新的永久URI和any 以后对此资源的引用应该使用其中一个返回的 的URI
换句话说,浏览器应记住所请求的URI被移动,并在用户再次请求旧URI时请求新的URI。
默认情况下,它应该保持在同一页面,不是多余的吗?
这不是代码正在做的事情。当用户请求非https版本时,它会重定向到https版本。
答案 1 :(得分:1)
这段代码正在重定向客户端以使用https
,以防它不使用https
。 301
告诉客户始终使用新位置。
重定向是通过Location
标题完成的,您只是部分正确,页面相同,但连接是通过https
而不是http
完成的。如果客户端已通过https
连接,则不会发生重定向。
答案 2 :(得分:1)
1)HTTP / 1.1 301用于让浏览器和搜索引擎知道该页面已移至https://example.com/thepage.php
2)此代码用于需要SSL的特定页面或网站。示例:购物车,银行,登录
答案 3 :(得分:1)
HTTPS默认通过端口443。如果用户通过普通HTTP访问,此代码使用Location-header将用户重定向到HTTPS。
301指示浏览器始终在该URL上的后续请求中将HTTP重定向到HTTPS。
在伪代码中它执行此操作:
if (user is NOT visiting through HTTPS)
redirect permanently to the same URL, but then through HTTPS
所以不,这不是多余的,因为如果有人使用HTTPS访问该页面,if-block的主体将不会被执行而且不会发生重定向。
答案 4 :(得分:1)
首先,该功能符合您的想法。
让我们详细了解一下您想要了解的内容:
header("HTTP/1.1 301 Moved Permanently");
这将设置HTTP响应状态代码。代码:301
。消息:Moved Permanently
。 301
是永久重定向,这只是告诉浏览器(HTTP客户端),下次直接使用新地址而不是请求的地址。
新地址带有Location:
标题。
header("Location: .");
这段代码只是错误的代码。不要指望它有效。我假设有人想再次重定向到同一页面,但这不起作用。 Location:
后面必须跟一个绝对URL,这是一个相对URL,不起作用。绝对网址始终以http://
或https://
开头,并包含主机名。