apache - 将所有http请求(包括子域)重定向到https

标签 apache redirect mod-rewrite

我已经尝试过其他线程的不同解决方案,但不知何故没有一个有效。所以我有一个名为 my-domain.com 的域,我希望所有 http 请求都发送到 http://my-domain.comhttp:///*.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/

相关文章:

php - MySQL启动错误-端口已被使用

java - ftp apache setDefaultimeout() 、 setSoTimeout() 和 setDataTimeout() 之间的区别

java - 使用 Java 的 Apache Http 摘要式身份验证

javascript - 一个cookie代码,使以下

wordpress - 如何使用 .htaccess 文件进行此重定向?

apache - 使用 .htaccess 重写规则重定向到我服务器上的不同文件夹

tomcat - 在 CDN、Web 服务器或代码级别在我的网站上强制使用 SSL 是否最佳?

php - 使用布局模板的 flash 消息重定向回来

html - 在 htaccess 中删除 html 扩展后永久重定向

php - 没有 http|https 的外部链接失败