在 Ubuntu 服务器上使用 Apache2 将 WWW 重定向到非 WWW,将 HTTP 重定向到 HTTPS

问题描述 投票:0回答:1

我有一台服务器,应该将所有流量重定向到非 WWW、HTTPS 页面,例如 https://website.com 但并非所有流量都会被重定向。

我期望什么以及我得到什么?

网址 重定向(预期) 重定向(已收到)
http://www.website.com https://website.com https://www.website.com/
http://website.com https://website.com https://website.com/
https://www.website.com https://website.com https://www.website.com/
https://website.com https://website.com https://website.com

为了重定向,我在 etc/apache2/sites-available 中使用以下 Apache2 .conf 文件:

front.conf

<VirtualHost *:80>
        ServerName website.com
        ServerAlias www.website.com
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/...
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        RewriteEngine on
        RewriteCond %{SERVER_NAME} =www.website.com [OR]
        RewriteCond %{SERVER_NAME} =website.com
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

        # RewriteCond %{HTTPS} off [OR]
        # RewriteCond %{HTTP_HOST} ^www\. [NC]
        # RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
        # RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
</VirtualHost>

front-le-ssl.conf

<IfModule mod_ssl.c>
        <VirtualHost *:443>
                ServerName website.com
                ServerAlias www.website.com
                ServerAdmin webmaster@localhost
                DocumentRoot /var/www/...
                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                RewriteEngine On
                # Too many redirects
                # RewriteCond %{HTTP_HOST} ^www\. [NC]
                # RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

                Include /etc/letsencrypt/...
                SSLCertificateFile /etc/letsencrypt/...
                SSLCertificateKeyFile /etc/letsencrypt/...
        </VirtualHost>
</IfModule>

我还尝试了注释的 RewriteCond/-Rule,但没有任何结果导致预期的行为。我错过了什么重要的事情吗?我花了很长时间寻找不同的方法,但似乎没有什么能按照我需要的方式工作。

提前致谢。

redirect https apache2 virtualhost
1个回答
0
投票

您似乎正在尝试配置 Apache 将所有流量重定向到非 www HTTPS 页面。您的 Apache 配置看起来大部分是正确的,但可能存在一些问题。这里有一些建议:

  1. 独立的非 WWW 和 WWW 虚拟主机: 不要将非 www 和 www 配置组合在同一个 VirtualHost 块中,而是为非 www 和 www 版本创建单独的 VirtualHost 块。这可以帮助避免冲突。

    <VirtualHost *:80>
        ServerName website.com
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/...
    
        RewriteEngine on
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    </VirtualHost>
    
    <VirtualHost *:80>
        ServerName www.website.com
        Redirect 301 / https://website.com/
    </VirtualHost>
    

    以类似方式调整 SSL VirtualHost。

  2. SSL 重定向: 在 SSL VirtualHost 中,您可能需要包含单独的重定向规则,以确保所有请求都重定向到非 www 版本。您可以使用不同的方法进行 HTTPS 重定向。

    <VirtualHost *:443>
        ServerName website.com
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/...
    
        RewriteEngine On
        RewriteCond %{HTTP_HOST} ^www\. [NC]
        RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    
        Include /etc/letsencrypt/...
        SSLCertificateFile /etc/letsencrypt/...
        SSLCertificateKeyFile /etc/letsencrypt/...
    </VirtualHost>
    

    确保在 SSL VirtualHost 中禁用注释掉的重定向规则。

  3. 检查配置: 进行更改后,请确保重新启动 Apache 以应用新配置。

    sudo service apache2 restart
    
  4. 清除浏览器缓存: 有时,浏览器会缓存重定向。清除浏览器缓存或尝试在新的隐身/私人窗口中确保您看不到缓存的结果。

  5. 检查其他配置文件: 确保其他 Apache 文件中没有冲突的配置,例如

    .htaccess
    文件或 Apache 设置中包含的其他配置文件。

进行这些调整后,您的 Apache 配置应按预期将所有流量重定向到非 www HTTPS 版本。

© www.soinside.com 2019 - 2024. All rights reserved.