【问题标题】:Apache htaccess http redirect to httpsApache htaccess http 重定向到 https
【发布时间】:2018-08-25 04:51:48
【问题描述】:

我已将 .htaccess 文件设置为将 http://example.com 重定向到 https://www.example.com。但是http://www.example.com 不会重定向到 https。

我在 site.com 上设置了我的 AWS 路由 53,并且别名为 www.example.com 指向 example.com。

这是我的 .htaccess 文件。我一生都无法弄清楚如何将所有重定向到https://www.example.com

RewriteBase /
RewriteEngine on

#WARNING: NEEDED FOR ONLINE VERSION - always have www in url
RewriteCond %{HTTP_HOST} !^www\. [NC]    
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,l]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

【问题讨论】:

  • 您可以添加虚拟主机并在那里添加强制重定向。它应该工作。如果您还有任何问题,请告诉我。
  • 所以我有一个指向 80 端口的虚拟主机设置。我是否需要在 443 端口为 https 创建另一个主机,然后设置重定向到那个主机?
  • 是的,你是对的。详情请查看namecheap.com/support/knowledgebase/article.aspx/9821/38/…

标签: javascript php .htaccess apache2


【解决方案1】:

    在 Apache 上使用 .htaccess 文件将 HTTP 重定向到 HTTPS

  1. 对于 CentOS/RHEL 用户,请确保您在 httpd.conf 中有以下行(mod_rewrite 支持 - 默认启用)。 LoadModule rewrite_module modules/mod_rewrite.so
  2. 现在您只需要在您的域根目录中编辑或创建 .htaccess 文件并添加这些行以将 http 重定向到 https。 重写引擎开启 RewriteCond %{HTTPS} !=on RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
  3. 现在,当访问者键入 http://www.yourdomain.com 时,服务器会自动将 HTTP 重定向到 HTTPS https://www.yourdomain.com。

    在 Apache 虚拟主机上将 HTTP 重定向到 HTTPS

  4. 此外,要强制所有 Web 流量使用 HTTPS,您还可以配置虚拟主机文件。通常,如果启用 SSL 证书,虚拟主机配置有两个重要部分;第一个包含非安全端口 80 的配置。

    第二个是安全端口 443。要将网站的所有页面的 HTTP 重定向到 HTTPS,首先打开相应的虚拟主机文件。然后通过添加下面的配置来修改它。 名称虚拟主机 *:80 服务器名称 www.yourdomain.com 重定向/https://www.yourdomain.com 虚拟主机> 服务器名称 www.yourdomain.com DocumentRoot /usr/local/apache2/htdocs SSL引擎开启 …… …… 虚拟主机>
  5. 保存并关闭文件,然后像这样重新启动 HTTP 服务器。 $ sudo systemctl restart apache2 [Ubuntu/Debian] $ sudo systemctl restart httpd [RHEL/CentOS]

注意:虽然<VirtualHost> 是最推荐的解决方案,因为它更简单、更安全。

【讨论】:

  • 我正在为我的 SSL 证书使用 AWS 负载均衡器。我是否还需要在 443 上创建一个额外的虚拟主机才能正常工作,还是只设置重定向?
【解决方案2】:

这将强制重定向到https,在底部添加这个

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

删除

RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

【讨论】:

  • 你能解释一下第三行的作用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-27
  • 2016-02-04
  • 2012-02-22
  • 2017-07-18
  • 2012-11-02
  • 1970-01-01
相关资源
最近更新 更多