使用通配符将不安全的域重写为安全的域

使用通配符将不安全的域重写为安全的域

我正在寻找正确的方法来处理使用 Apache 服务器配置将不安全(通过端口 80)请求重定向到安全(端口 443)请求。我也不想将其放在我的 .htaccess 文件中。

目前我有这个httpd配置文件文件:

ServerName example.com
ServerAlias *.example.com

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$
RewriteRule ^(.*)$ https://%1.example.com/$1 [R=302,L]

目标是进行通配符(在子域和子文件夹中)重定向。具体来说,以下是一些主要用例:

- http://subdomain.example.com 到 https://subdomain.example.com
 - http://example.com 到 https://www.example.com
 - http://www.example.com/contact/ 到 https://www.example.com/contact
 - http://subdomain.example.com/contact/ 到 https://subdomain.example.com/contact

简而言之,只需更换httphttps只要满足两个条件:

  • 请求的 URI 包含 mydomain.com

  • 请求的 URI 尚不安全(仅限 http 流量)

我尝试过许多不同的方法,但令我惊讶的是,似乎没有一种方法可以捕获子域名和子文件夹的所有变化。

有什么想法吗?谢谢!

答案1

简单的虚拟主机是捕获所有 HTTP 请求的最佳方式。这样您就不会意外重定向 HTTPS 请求。类似这样。

<VirtualHost *:80>
   ServerName example.com
   ServerAlias *.example.com

   # Redirect subdomains.
   RewriteEngine on
   RewriteCond %{HTTP_HOST} (\w+.example.com)
   RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]

   # Everything else to www.example.com preserving URI path
   Redirect 301 / https://www.example.com/
</VirtualHost

答案2

要重定向到 HTTPS:

重写引擎开启

RewriteCond %{HTTPS} 关闭

重写规则 ^ https://%{HTTP_HOST}%{REQUEST_URI}

但是你需要有一个用于 SSL 的虚拟主机:

名称虚拟主机 *:443

< 虚拟主机 *:443>

ServerName example.com

ServerAlias www.example.com

SSLEngine on

SSLCertificateFile    /etc/apache2/ssl/apache.crt

SSLCertificateKeyFile /etc/apache2/ssl/apache.key

</虚拟主机>


使用的 mod 重写指令的解释

RewriteEngine On --- 它将打开 apache 服务器的 mod_rewrite 引擎

RewriteCond %{HTTPS} 关闭 ------

如果连接使用 SSL/TLS,则包含文本“on”,否则包含文本“off”。(无论是否加载 mod_ssl,都可以安全使用此变量)。如果连接不是 ssl/tls,则将评估为真条件

重写规则 ^ https://%{HTTP_HOST}%{REQUEST_URI}

这是为了形成客户端最初请求的 url,但是是 https

相关内容