我已经尝试过其他线程的不同解决方案,但不知何故没有一个有效。所以我有一个名为 my-domain.com
的域,我希望所有 http 请求都发送到 http://my-domain.com
或 http:///*.my-domain.com
被重定向到相应的 https 页面。在文件夹 /etc/apache2/sites-enabled/
中,我有一个如下所示的配置文件:
<VirtualHost *:80>
ServerName my-domain.com
ServerAlias *.my-domain.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.my-domain\.com$
RewriteRule ^(.*)$ https://%1.my-domain.com/$1 [R=302,L]
</VirtualHost>
但仍然没有重定向。由于超时,所有请求都失败。我有什么遗漏的吗?
最佳答案
在您的 RewriteRule
中,%1
没有执行您认为它将执行的操作。
# bad
RewriteRule ^(.*)$ https://%1.my-domain.com/$1 [R=302,L]
试试这个:
# good
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
我们在这里所做的是接受任何非 HTTPS 的请求,并重写它。我们不关心查看%{HTTP_HOST}
,也不关心%{REQUEST_URI}
,因为我们只会盲目地使用它们。
这是对 HTTPS 的“盲目转发”。我不在乎你要求什么,但既然你是通过 HTTP 完成的,你就必须通过 HTTPS 完成。
到那时,进一步重定向就变成了不同的规则。
此外,302
是一个临时重定向。您可能希望考虑 301
,用于跨端口永久重定向。
关于apache - 将所有http请求(包括子域)重定向到https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64197142/