Apache-2.2

apache2 無法理解的 https 重定向

  • December 28, 2012

我有一個關於 apache2 和 Virtualhosts 的問題。

我在 /apache2/sites-available/ownsites 中聲明了一些,以便通過不同的域和子域進行訪問,例如:

<VirtualHost *:80>
   ServerName www.domain1.de
   ServerAlias domain1.de
   DocumentRoot /var/www/domain1/
   ServerAdmin myemailaddress.de
   <Directory />
           Order deny,allow
           deny from all
   </Directory>
   <Directory /var/www/domain1>
           Options -Indexes -FollowSymLinks
           AllowOverride all
           Order allow,deny
           allow from all
   </Directory>
</VirtualHost>

<VirtualHost *:80>
   ServerName www.domain2.de
   ServerAlias domain2.de
   DocumentRoot /var/www/domain1/
   ServerAdmin myemailaddress.de
   <Directory />
           Order deny,allow
           deny from all
   </Directory>
   <Directory /var/www/domain2>
           Options -Indexes -FollowSymLinks
           AllowOverride all
           Order allow,deny
           allow from all
   </Directory>
</VirtualHost>

一切正常,我可以訪問不同的域和子域。但是我啟用 ssl 是為了安全訪問我的郵件網路訪問

<VirtualHost *:443>
   SSLEngine On
   SSLCertificateFile /etc/apache2/certs/zarafa-ssl.crt
   SSLCertificateKeyFile /etc/apache2/certs/zarafa-ssl.key

   ServerName www.webaccess.domain1.de
   ServerAlias webaccess.domain1.de
   DocumentRoot /path/to/zarafa-webaccess/
   ServerAdmin myemailaddress.de 

   #rewrite rule for https  access
   RewriteEngine On
   RewriteCond %{HTTPS} !=on
   RewriteRule (.*) https://webaccess.domain1.de [R]


   <Directory />
           Order deny,allow
           deny from all
   </Directory>
   <Directory /path/to/zarafa-webaccess/>

           Options -Indexes -FollowSymLinks
           AllowOverride None
           Order allow,deny
           allow from all
   </Directory>


</VirtualHost>

如果我嘗試僅使用 http 訪問,此訪問也可以正常工作,包括重寫

但令人費解的是,現在如果我嘗試使用 https: https://www.domain1.de訪問我的主域,我將被重定向到 apache2-standard-index.html “它可以工作”,即使我刪除它。此外,如果我嘗試使用 https 訪問,我的另一個域 www.domain2.de 將被重定向到我的第一個域:https: //www.domain2.de -> http://domain1.de

當我嘗試一些 RewriteRules 時,也許還有其他來自 apache2 出口的文件保存了以前的 RewriteRules?

如果我聲明其他規則以定義其他行為,則沒有區別。

有沒有人有同樣的問題或知道如何解決它?

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond

HTTPS

如果連接使用 SSL/TLS,將包含文本“on”,否則將包含文本“off”。(無論是否載入了 mod_ssl,都可以安全地使用此變數)。

基本上,如果連接未使用 HTTPS,則 URL 將靜態重寫為https://webaccess.domain1.de. 請求http://webaccess.domain1.de/dir/file.txt?不,請求重寫為https://webaccess.domain1.de.

但這是一個愚蠢的規則,因為它所在的 VHost 被鎖定到埠 443,所以它永遠不會被HTTPS 連接擊中。將此配置從配置中取出,*:443並將其放入相關的*:80配置文件中。

更好的是,參考這個並使用這個:

RewriteEngine On
# This will enable the Rewrite capabilities

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf
# or .htaccess context

需要查找其他規則定義?查找 .htaccess 文件。

find /path/to/zarafa-webaccess/ -name '.htaccess'

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