这是一个典型问题关于 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。
希望对您有所帮助,敬请