Php 试图了解在连接为纯HTTP时重定向到HTTPS所使用的不同方法

Php 试图了解在连接为纯HTTP时重定向到HTTPS所使用的不同方法,php,https,Php,Https,因此,我在互联网上看到了几种不同的方法,但我不确定它们之间的实际区别是什么,或者为什么一种比另一种好 重写规则 重定向规则 目前我正在使用#3,我将它放在一个单独的文件中,并将其包含在任何需要HTTPS的页面中 这是坏习惯吗?我是否应该使用其他方法来使用HTTPS?第一种方法在Apache web服务器的.htaccess文件中使用。您可以更改此文件,无需重新启动服务器即可使更改生效。它是在您的第二个解决方案发生后执行的 第二个类似于此,但存储在Apache Web服务器的配置文件中。如果使用此

因此,我在互联网上看到了几种不同的方法,但我不确定它们之间的实际区别是什么,或者为什么一种比另一种好

  • 重写规则
  • 重定向规则
  • 目前我正在使用#3,我将它放在一个单独的文件中,并将其包含在任何需要HTTPS的页面中


    这是坏习惯吗?我是否应该使用其他方法来使用HTTPS?

    第一种方法在Apache web服务器的
    .htaccess
    文件中使用。您可以更改此文件,无需重新启动服务器即可使更改生效。它是在您的第二个解决方案发生后执行的

    第二个类似于此,但存储在Apache Web服务器的配置文件中。如果使用此方法,则必须重新启动Apache web服务器。这意味着您的网站将关闭几秒钟这可能是处理问题的最快解决方案,它是要执行的第一个级别


    第三个也可以工作,但执行时间要长一些毫秒。Google可能希望您使用第一个或第二个解决方案,因为它的Google bot也会访问您的页面,并且喜欢提前重定向而不是晚重定向。

    您可以在.htaccess文件中尝试类似的方法。它将强制站点使用HTTPS而不是HTTP

    ## FORCE SSL
        RewriteCond %{SERVER_PORT} !443
        RewriteRule ^(.*)$ https://YOURURL/$1 [R=301,L]
    
    简短的回答。 一般来说,这些都属于“依赖”的范畴

    但对于您正在展示的示例,我想说的是简单地放置
    Redirect”/https://www.example.com/“
    在普通HTTP站点上的
    .htaccess
    文件中是最好的方法。请注意,如果您处理的是特定页面,而我不知道您的站点布局是什么样子,那么
    .htaccess
    文件中的条目可能如下所示:

    Redirect "/login.php" "https://www.example.com/login.php"
    Redirect "/account.php" "https://www.example.com/account.php"
    Redirect "/starwars_spoilers.php" "https://www.example.com/starwars_spoilers.php"
    
    Redirect "/" "https://www.example.com/"
    
    curl -I http://www.example.com/
    
    HTTP/1.1 302 Found
    Date: Tue, 22 Dec 2015 01:43:32 GMT
    Server: Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/0.9.8zg DAV/2 PHP/5.4.10
    Location: https://www.example.com/
    Content-Type: text/html; charset=iso-8859-1
    
    更长的回答。 你问:

    所以我在互联网上见过几种不同的方法,但我不是 确定他们之间的实际区别是什么,或者为什么一个更好 比另一个好

    以我的拙见,我认为所有这些方法都是有效的,但根据使用情况和系统需求,每种方法都有自己的怪癖和特性。根据您所描述的内容,我建议在
    .htaccess
    文件中使用方法1或2,并将其放置在需要强制HTTPS连接的服务器代码库中。但我只会在您有更大的编码需求时使用PHP方法,而不是简单的“是HTTPS还是非HTTPS?”逻辑

    这是我的崩溃

  • 重写规则:Apache服务器方法。

    一种健壮的服务器级方法。在此方法发生之前,您的PHP代码不会运行。这使用Apache
    mod_rewrite
    模块允许使用
    RewriteCond
    RewriteRule
    等命令。此外,此方法的优点在于,它可以直接用于网站根目录下的
    .htaccess
    文档中,以影响该网站上任何目录中的所有子内容。也可以在单独的目录中使用。这里有一件好事,因为给出的逻辑很简单,如果连接不是HTTPS(
    RewriteCond%{HTTPS}!on
    ),那么只需将流量重定向到HTTPS等价物(
    RewriteRule(.*)HTTPS://%{HTTP\u HOST}%{REQUEST\u URI}
    ),您只需在一个公共代码目录中使用它,为HTTP和HTTPS提供服务,并让它执行以下操作“担心。”

    这就是说,这些东西不仅可以在
    .htaccess
    文件中使用,还可以在服务器级Apache配置文件中使用。主要区别在于,
    .htaccess
    文件可以由任何具有读/写访问权限的用户动态编辑,如果在Apache配置文件中使用,更改会立即发生le用户通常需要具有
    root
    /
    sudo
    访问权限,以便不仅编辑文件,而且重新启动Apache web服务以加载规则
    mod_rewrite
    规则

    一般来说,对于一组像这样的
    RewriteRule
    命令,我实际上更愿意将它们直接放在服务器Apache配置文件中,在本例中是端口80,普通HTTP配置块/区域,因为这样的配置是如此的深和广,我真的认为您只需要设置一次ach与
    .htaccess
    方法相比,随着时间的推移,您可能也会忘记这一点。因此,如果您将代码迁移到新服务器,突然HTTP连接开始工作,您可能会感到有点恐慌……直到后来才意识到您做到了这一点。这就是为什么在这个简单的示例中,我相信在中提供的代码逻辑更好de>.htaccess文件,该文件可放置在常用的内容目录中

  • 重定向规则:Apache服务器方法。

    一种基本的服务器级方法,可能适合您的“每页”需要更好。在这种方法出现之前,您的PHP代码不会运行。这使用Apache
    mod_rewrite
    模块允许使用类似和的命令。查看此方法的最佳方法是
    mod_alias
    的第一项工作是允许您创建别名,以将web URL路径映射到文件系统路径。这对我来说是一个非常复杂的问题ol功能,但它实际上不适用于您在此处描述的将普通HTTP请求重定向到安全HTTP请求的问题。它的第二个功能是创建一个web URL别名,它调用
    重定向
    ,这是重定向流量的简单方法

    对于您的简单需求,
    Redirect
    命令可用于相当“笨拙”的重定向任务,在那里很有用。但对于任何需要稍微精细一点的任务,它都没有用。哪种可能对您有用

    在您发布的示例中,显示的是
    配置块,它将是更大的Apache服务器sid的一部分
    Redirect "/" "https://www.example.com/"
    
    curl -I http://www.example.com/
    
    HTTP/1.1 302 Found
    Date: Tue, 22 Dec 2015 01:43:32 GMT
    Server: Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/0.9.8zg DAV/2 PHP/5.4.10
    Location: https://www.example.com/
    Content-Type: text/html; charset=iso-8859-1
    
    Redirect "/" "https://www.example.com/"
    
    Redirect 301 "/" "https://www.example.com/"
    
    HTTP/1.1 301 Moved Permanently
    Date: Tue, 22 Dec 2015 01:54:51 GMT
    Server: Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/0.9.8zg DAV/2 PHP/5.4.10
    Location: https://www.example.com/
    Content-Type: text/html; charset=iso-8859-1