Apache VHost 将别名重定向到 HTTPS

Apache VHost 将别名重定向到 HTTPS

我正在尝试在我的“游乐场” VPS 上执行虚拟主机。

我需要将 3 个或更多域重定向到主域。

它还应该重定向 HTTPS,Lets Encrypt 已配置并运行良好。

在当前状态下,此配置工作正常,但是当用户手动访问 HTTPS secsite.com(自己输入 HTTPS)时,它会首先重定向到主站点,然后再次重定向回 secsite.com。

<VirtualHost *:80>
        ServerName mainsite.com
        ServerAlias *.mainsite.com secsite.com *.secsite.com

        RewriteRule !https:\/\/mainsite\.com https://mainsite.com%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName mainsite.com
        ServerAlias *.mainsite.com secsite.com *.secsite.com

        RewriteRule !https:\/\/mainsite\.com https://mainsite.com%{REQUEST_URI} [END,NE,R=permanent]

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/mainsite.com

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

        SSLCertificateFile /etc/letsencrypt/live/mainsite.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/mainsite.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

知道如何完成这项工作吗?

答案1

RewriteRule !https:\/\/mainsite\.com https://mainsite.com%{REQUEST_URI} [END,NE,R=permanent]

RewriteRule指令仅匹配 URL 路径,而不是方案 + 主机名,正如您在此处尝试的那样。由于您已否定图案!前缀),它将总是成功并导致重定向循环。也就是说,如果它正在做任何事情……

您尚未启用重写引擎(即RewriteEngine On),因此,除非在配置中较早启用它,否则这些RewriteRule指令将被忽略。

如果您看到任何重定向,则要么您看到的是来自早期尝试的缓存响应(请注意,301 重定向由浏览器持久缓存),要么您的应用程序(或其他程序)正在触发重定向。

您的 vHost:80 (HTTP) 中的重定向应该是无条件的mod_alias Redirect,因为您要将所有内容重定向到 HTTPS。例如:

<VirtualHost *:80>
    ServerName mainsite.com
    ServerAlias *.mainsite.com secsite.com *.secsite.com

    Redirect 301 / https://mainsite.com/
</VirtualHost>

Redirect指令是前缀匹配,匹配后的所有内容都被复制到目标 URL 的末尾。例如,http://example.com/foo/bar重定向到https://mainsite/foo/bar

对于 vHost:443 (HTTPS),当请求的主机名不是规范主机时,您需要重定向。为此,您需要使用附加RewriteCond指令并检查HTTP_HOST服务器变量。例如:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName mainsite.com
    ServerAlias *.mainsite.com secsite.com *.secsite.com

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^mainsite\.com$
    RewriteRule ^ https://mainsite.com%{REQUEST_URI} [END,NE,R=permanent]
    :

相关内容