在 Apache 中从 http 重定向到 https

在 Apache 中从 http 重定向到 https

这是一个典型问题关于 Apache 中从 http 重定向到 https

有关的:

我有一个 Appache Web 服务器,它同时服务于http://example.com/https://example.com/。我想将所有 http 请求重定向到 https。目前,我正在使用此.htaccess规则将 http 请求重定向到 https。

RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

它按预期工作,example.com但相同的规则不适用于子链接,当我访问现有链接时,example.com/about它仍会在 http 中加载,现有链接不会发生重定向。

如何让 Apache 将所有 http 请求重定向到 https?

答案1

您应该配置 Apache Virtualhosts 来完成这项工作。RewriteMod 不是适合这种情况的解决方案,.htaccess也不是。

在您的 httpd.conf 或同等文件中,根据需要使用以下行。将其编辑为您的域和站点。

<VirtualHost *:80>
   ServerName www.example.com example.com
   Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost _default_:443>
   ServerName example.com
   DocumentRoot /usr/local/www/apache2/htdocs
   SSLEngine On

   ** Additional configurations here **

</VirtualHost>

希望这可以澄清该程序。

答案2

在共享主机上,当您没有更好的选择时,您可以修改.htaccess 中的重写规则:

RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

首先,开头的 RegEx 匹配所有请求,包括域后面的所有内容。

然后,HTTP 结果代码 301(永久移动)与新 URL 一起返回给客户端。大多数现代浏览器都会记住新 URL(在本例中为 httpS),并在用户下次访问网站时自动重定向到新 URL。

希望对您有所帮助,敬请

相关内容