Apache-2.4

虛擬主機中的特定子域未重定向,但其他子域成功

  • September 4, 2017

example.org我喜歡我的網站是否https://example.org可以訪問www.example.org

所以我想http://www.example.org重定向到http://example.orghttp://www.example.orghttps://example.org

但是發生了一件有趣的事情:

https://www.example.org重定向到https://example.org 但不重定向http://www.example.orghttp://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>

那麼問題似乎是什麼?也不應該兩者都httphttps重定向一起失敗或成功嗎?

問題在於域的 DNS ‘A’ 和 ‘AAAA’ 記錄。有一個預配置的 A/AAAA 記錄www導致所有問題。我刪除了它們並添加了一個新的*.example.org。DNS 將所有萬用字元子域重定向到伺服器。現在,如何處理它們的責任在於 Web 伺服器。

它現在工作正常。

另請檢查:如何將所有萬用字元子域重定向到特定子域?執行 nextcloud 伺服器的子域存在問題

你可能想要設置一個重寫,你可能想要這樣的東西:

`<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>`

或者,我想你應該簡單地修改*:80from RedirectPermanent / http://example.orgto中的重定向規則RedirectPermanent / https://example.org。重定向必須指向 https,而不是 http…

引用自:https://serverfault.com/questions/870587