【问题标题】:Force Heroku PHP app to use https for both www and non-www versions强制 Heroku PHP 应用程序对 www 和非 www 版本使用 https
【发布时间】:2018-05-17 07:36:20
【问题描述】:

我在 Heroku 上有一个 PHP 应用程序,带有用于域名 www 版本的 SSL 证书。我需要通过 https 访问所有请求(对 www 和非 www 的请求),并且我已将 .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

关于我做错了什么有什么想法吗?

【问题讨论】:

  • 这可能对LINK有帮助
  • 谢谢,我刚刚试了一下。不幸的是,仍然可以强制我的网站使用 http

标签: php .htaccess ssl heroku


【解决方案1】:

首先重定向到: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,关于带有强制 SSL 的 robots.txt

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

【讨论】:

  • 谢谢@MartinZeitler 我已将其添加到.htaccess,但我仍然可以在不重定向的情况下访问该站点的http 版本。您提到将.htaccess 移动到另一个位置。目前它位于根文件夹中,旁边是procfilecomposer.json
【解决方案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]

希望这将有助于实现你想要的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    相关资源
    最近更新 更多