我使用以下代码将我的子域的所有http请求重定向到https。
<VirtualHost *:80>
ServerName subdomain.example.com
Redirect 302 / https://subdomain.example.com
</VirtualHost>
现在我的问题是如何为所有子域做到这一点。
例如,http:subdomain1.example.com应转到https:subdomain1.example.com,http:subdomain2.example.com应转到https:subdomain2.example.com
如何为所有子域执行此操作,而无需为所有子域创建一个虚拟主机
更新
我发现RedirectMatch采用正则表达式。有谁知道如何使用正则表达式?
答案 0 :(得分:20)
您可以将其添加到服务器的.conf
文件中:
<VirtualHost *:80>
ServerName subdomain.example.com
ServerAlias *.example.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$
RewriteRule ^(.*)$ https://%1.example.com$1 [R=302,L]
</VirtualHost>
ServerAlias将允许vhost充当通配符,然后您可以从主机头中提取子域并将其包含在重写为https
中答案 1 :(得分:2)
这是对.conf文件的更简单的通用修改:
{{1}}
答案 2 :(得分:0)
作为RewriteHTTPToHTTPS状态的Apache Wiki条目,
建议不要使用mod_rewrite来执行此操作。参见RedirectSSL
用于强制HTTP到HTTPS重定向的vhost配置-也可与子域一起使用-
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
<Location "/">
Redirect permanent "https://%{HTTP_HOST}%{REQUEST_URI}"
</Location>
</VirtualHost>
<VirtualHost *:443>
[...your vHost configuration...]
SSLEngine On
SSLCertificateFile /path/to/your/cert.pem
SSLCertificateKeyFile /path/to/your/privkey.pem
</VirtualHost>
说明:Redirect和RedirectMatch通常没有Mod_Rewrite中的变量(如{HTTP_HOST}
),但是如果使用<Location >
,这些变量将被分配。
Redirect permanent
(或者:Redirect 301
)将使用http 301代码重定向,因为
301重定向被认为是best practice,用于将用户从HTTP升级到HTTPS。
注意:此配置基于Wildcard Certificates的子域。