http://example.com不会重定向到https://www.example.com

时间:2017-07-17 09:31:48

标签: apache redirect

我们在网络服务器上有这两个conf。

HTTP:

<VirtualHost *:80>
    ServerName www.example.de
    ServerAlias example.de www.example.at example.at www.example.net example.net

    RewriteEngine On
    RewriteCond %{HTTP_HOST} off
    RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI}
   # Error page is just the index telling about the situation of not being connected
    ErrorDocument 404 /index.html
</VirtualHost>

的https:

<IfModule mod_ssl.c>
NameVirtualHost *:443
<VirtualHost *:443>
    ServerName www.example.de
    ServerAlias example.de www.example.at example.at www.example.net example.net

    SSLEngine On
    SSLCertificateFile /etc/letsencrypt/live/www.example.de/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.example.de/privkey.pem

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ %{REQUEST_SCHEME}://www.%{HTTP_HOST}$1 [R=301,L]

    DocumentRoot /var/www/homepage/web
    <Directory /var/www/homepage/web>
            AllowOverride All
            Order Allow,Deny
            Allow from All
    </Directory>



            ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
LogLevel warn

    ErrorLog ${APACHE_LOG_DIR}/example-ssl.error.log
    CustomLog ${APACHE_LOG_DIR}/example-ssl.access.log combined

</VirtualHost>
</IfModule>

当我尝试打开http://www.example.com时,它会重定向到https://www.example.com

当我尝试打开http://example.comhttps://example.com时,我收到错误“Page not available”

我在Web服务器上的两个conf文件有什么问题? 两者都应重定向到https://www.example.com网址。

1 个答案:

答案 0 :(得分:1)

请除非没有其他选择,否则请尽量避免使用mod_rewrite。正如你所看到的那样复杂,会使你的生活变得更加艰难。

单个Redirect将把所有内容重定向到SSL虚拟主机:

Redirect / https://www.example.de/

注意:重定向取决于mod_alias,因此不需要在非SSL虚拟主机中使用RewriteEngine等。

如果你坚持使用mod_rewrite,因为你有很多名字,需要变量:

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*) https://www.%{HTTP_HOST}/$1 [R,L]
RewriteRule ^(.*) https://%{HTTP_HOST}/$1 [R,L]

第一个捕捉到主机不以www开头的情况,第二个抓住其余部分。