apache2 难以理解的 https 重定向

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 才能安全访问我的 mail-webaccess

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

如果我声明其他规则来定义其他行为,则没有区别。

有谁遇到过同样的问题或知道如何解决吗?

答案1

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'

相关内容