虛擬主機中的特定子域未重定向,但其他子域成功
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
重定向一起失敗或成功嗎?
問題在於域的 DNS ‘A’ 和 ‘AAAA’ 記錄。有一個預配置的 A/AAAA 記錄
www
導致所有問題。我刪除了它們並添加了一個新的*.example.org
。DNS 將所有萬用字元子域重定向到伺服器。現在,如何處理它們的責任在於 Web 伺服器。它現在工作正常。
你可能想要設置一個重寫,你可能想要這樣的東西:
`<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
fromRedirectPermanent / http://example.org
to中的重定向規則RedirectPermanent / https://example.org
。重定向必須指向 https,而不是 http…