各种PHP问题

时间:2011-10-10 17:16:06

标签: php http-status-code-301 http-status-codes

  1. 关于此功能:

    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我假设。什么是永久使用的移动?

  2. 代码header("Location: .");

    上面有什么用,它只不过是告诉它保持同一页面。默认情况下它应该保持在同一页面,不是多余的吗?

5 个答案:

答案 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,以防它不使用https301告诉客户始终使用新位置。

重定向是通过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 Permanently301是永久重定向,这只是告诉浏览器(HTTP客户端),下次直接使用新地址而不是请求的地址。

新地址带有Location:标题。

header("Location: .");

这段代码只是错误的代码。不要指望它有效。我假设有人想再次重定向到同一页面,但这不起作用。 Location:后面必须跟一个绝对URL,这是一个相对URL,不起作用。绝对网址始终以http://https://开头,并包含主机名。