我希望我的网站可以被访问example.org
或https://example.org
不被访问www.example.org
。
所以我想http://www.example.org
重定向到http://example.org
和。http://www.example.org
https://example.org
但有趣的事情发生了:
https://www.example.org
重定向至https://example.org
但http://www.example.org
不是http://example.org
我的main.conf:
<VirtualHost *:80>
ServerName example.org
ServerAdmin webmaster@localhost
DocumentRoot "/var/www/html"
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:443>
ServerName example.org
ServerAdmin webmaster@localhost
DocumentRoot "/var/www/html"
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /pathtocert.pem
SSLCertificateKeyFile /pathtokey.pem
</VirtualHost>
<Directory "/var/www/html">
Options FollowSymlinks ExecCGI
AllowOverride None
Require all granted
</Directory>
我的www.conf:
<VirtualHost *:80>
ServerName www.example.org
ServerAdmin webmaster@localhost
DocumentRoot "/var/www/html"
RedirectPermanent / http://example.org
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:443>
ServerName www.example.org
ServerAdmin webmaster@localhost
DocumentRoot "/var/www/html"
RedirectPermanent / https://example.org
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /pathtocert.pem
SSLCertificateKeyFile /pathtokey.pem
</VirtualHost>
<Directory "/var/www/html">
Options FollowSymlinks ExecCGI
AllowOverride None
Require all granted
</Directory>
那么问题出在哪里?http
和https
重定向难道不应该同时失败或成功吗?
答案1
问题出在域的 DNS“A”和“AAAA”记录上。有一个预配置的 A/AAAA 记录导致www
了所有问题。我删除了它们并添加了一个新的*.example.org
。DNS 将所有通配符子域重定向到服务器。现在,如何处理它们的责任落在了 Web 服务器上。
现在运行良好。
答案2
您可能需要设置重写,您可能需要如下内容:
<VirtualHost *:80> RewriteEngine On # this redirect only www.example.org to https RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^www.example.org [NC] RewriteCond %{HTTP_HOST} ^example.org [NC] # this redirects anything to its https equivalent RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}/$1 [R,L] </VirtualHost>
*:80
或者,我猜你应该简单地修改从到RedirectPermanent / http://example.org
的重定向规则RedirectPermanent / https://example.org
。重定向必须指向 https,而不是 http...