err_too_many_redirects ao tentar redirecionar o não www para www

0

Dentro do arquivo conf do apache do virtuahost /etc/apache2/sites-available/000-default.conf .

Eu tentei colocar esses códigos dentro do arquivo conf do apache.

ServerName example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule ^/(.*)$ http://www.example.com/$1 [L,R=301]

Eu também tentei.

< If "%{HTTP_HOST} != 'YOUR-DOMAIN.com'">
Redirect "/" "http://www.YOUR-DOMAIN.com/"
</If>

Também fiz isso.

<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost *:80>
    ServerName www.example.com
    # real server configuration
</VirtualHost>
    
por Mark178 05.01.2018 / 16:38

1 resposta

0

Para resolver seu problema, você precisa entender o conceito de 'NameVirtualHosting' e a maneira especial do Ubuntu de implementar o serviço da web apache.

NameVirtualHost

O seu servidor web apache (local) pode servir diferentes sites no mesmo endereço, desde que sejam "nomeados" de forma diferente. O servidor da web tenta corresponder ao nome do host (por exemplo, exemplo.com) com uma diretiva Servername ou ServerAlias correspondente na configuração do seu apache. Para cada 'website' você precisa de um container <VirtualHost> separado em sua configuração; no seu caso, você precisa de um para example.com e outro para www.example.com.

Apache Webserver e Ubuntu

O pacote do servidor apache2 do Ubuntu altera os binários, arquivos de configuração e diretórios padrão:

  • O binário do servidor Web Apache é /usr/sbin/apache2
  • O diretório raiz do servidor é /etc/apache2
  • A configuração principal é /etc/apache2/apache2.conf
  • Configurações adicionais do servidor vão para /etc/apache2/conf.d
  • As configurações do módulo estão em /etc/apache2/mods-available/
  • Os sites do VirtualHost são configurados em /etc/apache2/sites-available/

Até agora, tão fácil; agora vem a parte complicada (para mim é): com o Ubuntu você tem quatro comandos para habilitar / desabilitar módulos e (!) configuração do VirtualHosts:

  • a2ensite / a2dissite
  • a2enmod / a2dismod

com esses comandos, você ativa os sites reais configurados em /etc/apache2/sites-available/ . Há pelo menos uma configuração virtualhost padrão default.conf que, quando ativada por a2ensite default , está vinculada como sites-enabled/000.default.conf .

E tudo funciona, porque a configuração principal apache2.conf contém essa diretiva Include:

Include sites-enabled/

Vamos praticar:

Remova todos os links simbólicos em sites-enabled/ e, se tiver armazenado arquivos de configuração reais em sites-enabled/ , mova-os para sites-available (tenha cuidado para não sobrescrever os arquivos existentes em sites-available/ e renomeie os antigos). / p>

Agora, você cria dois novos arquivos virtualhost em sites disponíveis:

vi /etc/apache2/sites-available/0_www.example.com
<VirtualHost *:80>
    ServerName www.example.com

    DocumentRoot /var/www
    DirectoryIndex index-www.html
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error-www-example-com.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access-www-example-com.log combined
</VirtualHost>

vi sites-available/1_example.com 
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName example.com

    ErrorLog ${APACHE_LOG_DIR}/error-example-com.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access-example-com.log combined

    RewriteEngine On
    RewriteRule ^/(.*) http://www.example.com/$1 [R=302]
</VirtualHost>

e habilite-os, e o script cria um link simbólico de sites-available/ a sites-enabled/ :

sudo a2ensite 0_www.example.com

sudo a2enmod rewrite

sudo a2ensite 1_example.com

(reinicie o serviço apache2 - service apache2 restart ou systemctl restart apache2 )

ls -l sites-enabled/
total 0
lrwxrwxrwx 1 root root 30 Jan  8 17:59 example.com -> ../sites-available/example.com
lrwxrwxrwx 1 root root 34 Jan  8 17:52 www.example.com -> ../sites-available/www.example.com

Precisamos de páginas de índice simples

# cat /var/www/index-non.html
<html><body><h1>example.com</h1>
This is the NON-www index page
</body></html>
# cat /var/www/index-www.html
<html><body><h1>www.example.com</h1>
This is the www.example.com index page.
</body></html>

Tenha em mente que a primeira diretiva <VirtualHost > encontrada pelo servidor web apache será o Webcontainer padrão, portanto, a ordem das diretivas VirtualHost é importante; no nosso caso, se eu chamar o servidor web sem um nome de host específico ou um nome de host, que não está configurado, estou recebendo o www-index porque é a primeira diretiva virthost.

# No Hostname given
curl http://127.0.0.1/ 
<html><body><h1>www.example.com</h1>
This is the www.example.com index page.
</body></html>

# index-www
curl -H "Host: www.example.com" http://127.0.0.1/ 
<html><body><h1>www.example.com</h1>
This is the www.example.com index page.
</body></html>

# non-www index
curl -H "Host: example.com" http://127.0.0.1/
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="http://www.example.com/">here</a>.</p>
<hr>
<address>Apache/2.2.22 (Ubuntu) Server at example.com Port 80</address>
</body></html>

(Por favor, note o uso da variável de cabeçalho do host -H)

Lembre-se de que, para que o NameVirtualHosting funcione, o servidor da web e o web client precisam estar configurados corretamente.

Espero que minhas instruções possam ajudá-lo a resolver seu problema.

    
por Stefan 05.01.2018 / 23:19