Php 试图了解在连接为纯HTTP时重定向到HTTPS所使用的不同方法
因此,我在互联网上看到了几种不同的方法,但我不确定它们之间的实际区别是什么,或者为什么一种比另一种好Php 试图了解在连接为纯HTTP时重定向到HTTPS所使用的不同方法,php,https,Php,Https,因此,我在互联网上看到了几种不同的方法,但我不确定它们之间的实际区别是什么,或者为什么一种比另一种好 重写规则 重定向规则 目前我正在使用#3,我将它放在一个单独的文件中,并将其包含在任何需要HTTPS的页面中 这是坏习惯吗?我是否应该使用其他方法来使用HTTPS?第一种方法在Apache web服务器的.htaccess文件中使用。您可以更改此文件,无需重新启动服务器即可使更改生效。它是在您的第二个解决方案发生后执行的 第二个类似于此,但存储在Apache Web服务器的配置文件中。如果使用此
这是坏习惯吗?我是否应该使用其他方法来使用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?”逻辑
这是我的崩溃
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连接开始工作,您可能会感到有点恐慌……直到后来才意识到您做到了这一点。这就是为什么在这个简单的示例中,我相信在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