我在 apache2.conf 中进行了以下设置:
<Directory /var/www/html>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.|)mydomain\.com$
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(.*) https://www.mydomain\.com [NC,R=302,L]
</Directory>
<VirtualHost *:443>
ServerName mydomain.com:443
ServerAlias www.mydomain.com
VirtualDocumentRoot /var/www/html/%1/
SSLCertificateFile /etc/ssl/certs/mydomain_com.crt
SSLCertificateKeyFile /etc/ssl/private/www.mydomain.com.key
SSLCertificateChainFile /etc/ssl/certs/mydomain.com.ca-bundle
</VirtualHost>
<VirtualHost *>
ServerAlias *.mydomain.com
UseCanonicalName Off
VirtualDocumentRoot /var/www/html/%1/
<Directory /var/www/html/%1>
RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTPS_HOST}%{REQUEST_URI} [NC,R=301,L]
</Directory>
</VirtualHost>
我拥有所需的所有行为/功能,只是我无法使我创建的最后一条重写规则正常工作。我的目的是将通配符子域上的任何 SSL 用户自动重定向到端口 80(因为我没有通配符 SSL 证书,并且我不希望他们看到错误/警告)
答案1
我的目的是将通配符子域上的任何 SSL 用户自动重定向到端口 80(因为我没有通配符 SSL 证书并且我不希望他们看到错误/警告)
任何重定向都已完成后TLS 连接已建立。因此,无法将用户从您没有证书的域中重定向出去,因为您需要证书才能重定向用户。