000-default.conf do Apache - comportamento estranho

1

Estou tentando obter um redirecionamento de example.com para www.example.com (não-www para www).

Meu arquivo sites-available/example.com.conf se parece com isso;

<VirtualHost *:80 *:443>
        ServerName www.example.com
        ServerAdmin [email protected]

        DocumentRoot /var/www/example.com/public_html

        ErrorLog /var/www/example.com/logs/error.log
        CustomLog /var/www/example.com/logs/access.log combined
</VirtualHost>

<VirtualHost *:80>
        ServerName example.com
        Redirect permanent / http://www.example.com
</VirtualHost>
<VirtualHost *:443>
        ServerName example.com
        Redirect permanent / https://www.example.com
</VirtualHost>

Meu arquivo sites-available/000-default.conf é semelhante a este:

<VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/default/public_html

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

Agora, quando solicitar http://www.example.com , ele responderá conforme solicitado. No entanto, ao solicitar http://example.com , ele processará a solicitação usando a configuração em 000-default.conf .

Desvincular 000-default.conf de sites-enabled/ corrigirá esse problema, mas isso não é algo que eu queira fazer (desejo manter um comportamento padrão para solicitações desconhecidas).

Qual é o problema aqui? Por que a configuração em 000-default.conf substitui o redirecionamento?

    
por Unidan 03.09.2014 / 23:49

1 resposta

2

Seu host virtual domain.com apenas especifica www.example.com como nome, portanto, o Apache só corresponderá quando www for especificado.

ServerName www.example.com

Você provavelmente deseja usar a seguinte configuração:

ServerName example.com
ServerAlias www.example.com

Edit: Eu estou supondo, no seu caso, que o Apache tenta corresponder seus hosts virtuais em uma ordem similar à seguinte:

www.example.com > default > example.com (80) > example.com (443)

Como o host default corresponde a todas as solicitações enviadas na porta 80, os outros dois nunca seriam testados. Isso também explica por que a remoção do padrão faz com que sua configuração funcione corretamente.

Eu não estou muito familiarizado com a correspondência de host virtual do Apache, mas você pode encontrar mais informações sobre isso em este página .

    
por 04.09.2014 / 00:04