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.