强制Heroku PHP应用程序使用https用于www和非www版本

时间:2017-12-03 20:51:40

标签: php .htaccess ssl heroku

我在Heroku上有一个PHP应用程序,带有域名www版本的SSL证书。我需要(通过www和非www)的所有请求通过https转发,并且我已经添加了.htaccess。但是,仍然存在用户访问http版本的情况,我不明白为什么。

这是我的.htaccess:

RewriteEngine on

RewriteCond %{HTTPS}::%{HTTP_HOST} ^off::(?:www\.)?(.+)$
RewriteRule ^ https://www.%1%{REQUEST_URI} [NE,L,R]

我的理解是,这应该强制所有用户通过https://www进行访问,但这并不总是会发生。例如,Google有时会在没有https的情况下提供搜索结果,而链接会打开不安全的http

关于我做错了什么的任何想法?

2 个答案:

答案 0 :(得分:3)

首先重定向到:443上的同一主机名,然后重定向到www.。普通www.只是DNS中的别名,而大多数网站使用较短的非www主机名。您可能需要扩展证书,因为它需要显式添加两个主机名,除非它是通配符。

# rewrite to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

如果要将所有内容重写为www.(或证书所说的任何内容),只需在下面添加其他规则即可。首次访问时,非SSL规则[L]是最后一步,在下次访问时,SSL规则[L]是重写的最后一步。

# rewrite to www.
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

另请参阅此答案here,关于robots.txt强制SSL。

当“仍然可以使用HTTP”时...可能会考虑.htaccess文件的另一个位置 - 或者为每个主机名创建目录,这只是重定向。

答案 1 :(得分:2)

请尝试以下规则并告知我这些规则是否有效这些规则将使用https请求而不是http或www和非www版本。现在,以下规则将用户重定向到类似的内容。

  

https://www.example.com/

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]

希望这有助于实现您想要的目标