apache2 無法理解的 https 重定向
我有一個關於 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'