Apache2 não reescreve como esperado

3

Eu tenho um VPS on Digital ocean, hospedando dois sites, cada um com vários domínios.

Site 1: link

Domínios alternativos: %código%, %código%, %código%, %código%, jeremiahro.se

Site 2: link

Domínios alternativos: %código%, %código%, %código%, %código%, jeremiahrose.band ,

Estou tentando configurá-lo para que uma solicitação para qualquer um dos domínios alternativos (http ou https) redirecione para o domínio canônico seguro desse site. por exemplo, www.jeremiahrose.com redireciona para www.jeremiahro.se .

Atualmente, só funciona pela metade - www.thewilliewagtails.com e thewilliewagtails.com estão retornando uma página padrão, e thewilliewagtails.band/ não está redirecionando.

Eu não posso para a vida de mim descobrir qual é o problema, estou claramente fora da minha profundidade aqui.

jez@jeremiahrose:/etc/apache2$ ls sites-enabled/
000-default.conf  jeremiahrose.com.conf  thewilliewagtails.band.conf

000-default.conf:

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

jeremiahrose.com.conf

<VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/jeremiahrose.com

        <Directory /var/www/jeremiahrose.com/>
            Options Indexes FollowSymLinks
            AllowOverride None
            Require all granted
        </Directory>

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

        <IfModule mod_dir.c>
            DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
        </IfModule>

    ServerName jeremiahrose.com
        ServerAlias jeremiahro.se
        ServerAlias jeremiahrose.band
        ServerAlias www.jeremiahrose.com
        ServerAlias www.jeremiahro.se
        ServerAlias www.jeremiahrose.band


    RewriteEngine on
    #Added automatically by let's encrypt:
    RewriteCond %{SERVER_NAME} =www.jeremiahrose.com [OR]
    RewriteCond %{SERVER_NAME} =jeremiahrose.band [OR]
    RewriteCond %{SERVER_NAME} =www.jeremiahro.se [OR]
    RewriteCond %{SERVER_NAME} =jeremiahro.se [OR]
    RewriteCond %{SERVER_NAME} =jeremiahrose.com [OR]
    RewriteCond %{SERVER_NAME} =www.jeremiahrose.band
    RewriteRule ^ https://jeremiahrose.com%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>


<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin [email protected]
        DocumentRoot /var/www/jeremiahrose.com

        <Directory /var/www/jeremiahrose.com/>
            Options Indexes FollowSymLinks
            AllowOverride None
            Require all granted
        </Directory>

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

        <IfModule mod_dir.c>
            DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
        </IfModule>

    ServerName jeremiahrose.com
    ServerAlias jeremiahro.se
    ServerAlias jeremiahrose.band
    ServerAlias www.jeremiahrose.com
    ServerAlias www.jeremiahro.se
    ServerAlias www.jeremiahrose.band

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

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

thewilliewagtails.band.conf

<VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/thewilliewagtails.band

        <Directory /var/www/thewilliewagtails.band/>
            Options Indexes FollowSymLinks
            AllowOverride None
            Require all granted
        </Directory>

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

        <IfModule mod_dir.c>
            DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
        </IfModule>

    ServerName thewilliewagtails.band
        ServerAlias thewilliewagtails.com.au
        ServerAlias thewilliewagtails.com
        ServerAlias wwww.thewilliewagtails.com
        ServerAlias www.thewilliewagtails.com.au
        ServerAlias www.thewilliewagtails.band


    RewriteEngine on
    #Added automatically by let's encrypt:
    RewriteCond %{SERVER_NAME} =www.thewilliewagtails.com [OR]
    RewriteCond %{SERVER_NAME} =thewilliewagtails.com [OR]
    RewriteCond %{SERVER_NAME} =www.thewilliewagtails.band [OR]
    RewriteCond %{SERVER_NAME} =thewilliewagtails.com.au [OR]
    RewriteCond %{SERVER_NAME} =www.thewilliewagtails.com.au
    RewriteRule ^ https://thewilliewagtails.band%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>


<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin [email protected]
        DocumentRoot /var/www/thewilliewagtails.band

        <Directory /var/www/thewilliewagtails.band/>
            Options Indexes FollowSymLinks
            AllowOverride None
            Require all granted
        </Directory>

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

        <IfModule mod_dir.c>
            DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
        </IfModule>

    ServerName thewilliewagtails.band
    ServerAlias thewilliewagtails.com
    ServerAlias thewilliewagtails.com.au
    ServerAlias www.thewilliewagtails.com
    ServerAlias www.thewilliewagtails.com.au
    ServerAlias www.thewilliewagtails.band

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

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/jeremiahro.se/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/jeremiahro.se/privkey.pem
</VirtualHost>
</IfModule>
    
por Jeremiah Rose 12.04.2018 / 07:10

2 respostas

2

It's currently only half working - www.thewilliewagtails.com and thewilliewagtails.com are returning a default page, and thewilliewagtails.band/ is not redirecting.

Não consigo ver por que thewilliewagtails.com não estaria funcionando. No entanto, você tem um erro de digitação no contêiner <VirtualHost *:80> , que corresponde a wwww , não www no ServerAlias , então isso simplesmente nunca corresponderá:

ServerAlias wwww.thewilliewagtails.com

E thewilliewagtails.band é omitido do seu redirecionamento HTTP para HTTPS ( <VirtualHost *:80> ) (diretiva RewriteCond ausente) - portanto, sim, isso não será redirecionado na configuração atual. Em vez de verificar todos os possíveis nomes de host, não é necessário, você só precisa verificar se não é o nome do host canônico (veja abaixo).

Eu concordo completamente com a resposta do @ roaima. No entanto, você está a meio caminho com sua configuração atual e suas diretivas podem ser muito simplificadas.

Como sua porta canônica é 443, você precisa apenas de um mod_alias Redirect incondicional nos contêineres <VirtualHost *:80> (o mod_rewrite não é necessário) para criar efetivamente o redirecionamento HTTP para HTTPS. Então, por exemplo, o seguinte bloco mod_rewrite:

RewriteEngine on
#Added automatically by let's encrypt:
RewriteCond %{SERVER_NAME} =www.thewilliewagtails.com [OR]
RewriteCond %{SERVER_NAME} =thewilliewagtails.com [OR]
RewriteCond %{SERVER_NAME} =www.thewilliewagtails.band [OR]
RewriteCond %{SERVER_NAME} =thewilliewagtails.com.au [OR]
RewriteCond %{SERVER_NAME} =www.thewilliewagtails.com.au
RewriteRule ^ https://thewilliewagtails.band%{REQUEST_URI} [END,NE,R=permanent]

Pode ser imediatamente substituído por um simples / incondicional mod_alias Redirect :

Redirect 301 / https://thewilliewagtails.band/

E o redirecionamento canônico do mod_rewrite correspondente no <VirtualHost *:443> pode ser muito simplificado. Em vez de verificar todos os nomes de host que podem ser, você precisa apenas verificar se não é o nome do host canônico. Por exemplo, o seguinte:

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

Pode ser imediatamente substituído pelo mais simples:

RewriteCond %{HTTP_HOST} !^thewilliewagtails\.band$
RewriteRule ^ https://thewilliewagtails.band%{REQUEST_URI} [R=permanent,L]

Agora há muito menos para lembrar / errar.

No entanto, provavelmente continuaria criando um contêiner vHost separado para os nomes de host 443 não-canônicos, como sugere @roaima. Você pode então usar um mod_alias Redirect incondicional e se livrar completamente do mod_rewrite.

    
por 12.04.2018 / 13:04
1

Solução mais fácil sem entrar em conjuntos de regras de reescrita complicados.

Para cada site e seus aliases:

  1. Crie uma configuração vHost canônica para o site. Aceite apenas o nome canônico único.
  2. Crie um vHost não canônico contendo todos os nomes alternativos e use um Redirect simples para enviar usuários para o vHost canônico correspondente.
por 12.04.2018 / 08:53