У меня вопрос об apache2 и Virtualhosts.
Я объявил некоторые из них в моих / apache2 / sites-available / ownnsites, чтобы получить доступ через разные домены и поддомены, например:
<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 "Это работает", даже если я удалю его. Кроме того, мой другой домен www.domain2.de перенаправляется на мой первый домен, если я попытаюсь получить доступ с помощью https: https://www.domain2.de -> http://domain1.de
Может быть, есть какой-нибудь другой файл из выходов apache2, где сохранены прежние RewriteRules, когда я пробовал некоторые RewriteRules?
Если я объявлю другие правила, чтобы определить другое поведение, разницы нет.
У кого-нибудь была такая же проблема или есть идеи, как ее решить?
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond
HTTPS
Будет содержать текст «включено», если соединение использует SSL / TLS, или «выключено» в противном случае. (Эту переменную можно безопасно использовать независимо от того, загружен ли mod_ssl).
В основном, если соединение не использует HTTPS, URL-адрес статически переписан на https://webaccess.domain1.de
. Запрос http://webaccess.domain1.de/dir/file.txt
? Нет, запрос переписан на https://webaccess.domain1.de
.
Но это глупое правило, поскольку VHost, в котором он происходит, заблокирован для порта 443, поэтому он никогда не будет затронут подключением, которое не HTTPS. Выньте этот конфиг из *:443
config и поместите его в соответствующий *: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'