mod_rewrite - RewriteCond se% {HTTP_HOST} NÃO é nenhum ServerName / ServerAlias

1

Eu quero saber se é possível fazer uma condição de reconfiguração se o% {HTTP_HOST} NÃO for o ServerName ou qualquer um dos ServerAlias listados.

Meu objetivo é redirecionar todas as solicitações feitas para um domínio que não esteja listado como o ServerName, ServerAlias 'ou direto para o IP ( link , link . etc ...).

Atualmente, consigo fazer o seguinte como parte do meu redirecionamento não SSL para SSL. Depois das minhas regras de redirecionamento não SSL para SSL, tenho uma regra catch all onde, se {HTTP_HOST} não for example.com, encaminhará para o meu domínio real.

Eu tenho regras de reescrita semelhantes em vigor para o meu tráfego de SSL, onde eu tenho a minha regra de pegar todas as regras de reescrever o meu não-WWW para WWW.

<VirtualHost *:80>
ServerName  domain1.com
ServerAlias domain2.com domain3.com
DocumentRoot /home/domain/public_html
RewriteEngine on
RewriteCond %{SERVER_NAME} =domain1.com [OR]
RewriteCond %{SERVER_NAME} =domain2.com [OR]
RewriteCond %{SERVER_NAME} =domain3.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,NE,R=permanent]
RewriteCond %{HTTP_HOST} !^example\.com$
RewriteRule ^(.*)$ https://domain1.com$1 [R=301,NC]
</VirtualHost>

Estou curioso para saber se há uma implementação melhor para a última regra de reescrita em que se HTTP_HOST NÃO é um dos nomes dos servidores ou nomes de servidores listados.

Meu aplicativo da web é usado para testes de rede simples (ping meu ip, traceroute, etc ...) para que os vários endereços IP sejam facilmente obtidos pelo usuário. Eu só quero ter certeza de que qualquer solicitação feita que não esteja usando um dos endereços de servidor listados ou enviada diretamente para o endereço IP seja redirecionada para o meu domínio principal. O acima funciona, eu só quero saber se existe uma maneira melhor.

    
por Analog 26.06.2018 / 14:22

1 resposta

3

Você está pensando demais nisso. Você não precisa colocar toda a lógica em RewriteConds.

Quando o Apache obtém uma solicitação para um host que não corresponde a nenhuma das diretivas ServerName ou ServerAlias em qualquer um dos VirtualHosts, ele usará o VirtualHost padrão - ou seja, aquele que é o primeiro na configuração. Portanto, basta colocar sua regra de reconfiguração em um VirtualDomain separado e garantir que ela seja carregada primeiro, listando-a primeiro no arquivo de configuração ou nomeando-a, por exemplo. '00 -default.conf 'no diretório onde você guarda seus VirtualHosts.

Como a configuração nesse VirtualHost só será usada quando alguém se conectar e usar um nome de domínio que não esteja listado, você não precisa negar nenhum dos outros nomes de domínio. A configuração pode ser simplesmente

<VirtualHost *:80>
ServerName  default.example.net
DocumentRoot /home/domain/public_html
RewriteEngine on
RewriteRule ^(.*)$ https://example.com$1 [R=301,NC]
</VirtualHost>

Veja link para uma explicação mais detalhada de como o Apache escolhe qual VirtualHost usar.

    
por 26.06.2018 / 14:33