CataBits

CataBits

Desenvolvendo vários sites no Apache

Se você cria aplicativos Web em PHP e MySQL, certamente usa o Apache como servidor Web, instalado em um computador local, para desenvolver seus produtos antes de publicá-los na Internet. O Apache é o "webserver" mais popular da Internet já faz um bom tempo, e, apesar de ter suas origens nos sistemas Unix, é portado para diversas plataformas modernas. No Apache temos basicamente o "diretório raiz" do site, sob o qual devem ficar todos os arquivos e subdiretórios do site e, principalmente a página "index.php". No caso do XAMPP, esse diretório é o "htdocs".

Alguns pacotes de servidores com Apache.
Alguns pacotes de servidores com Apache.

Quem desenvolve, obviamente trabalha com vários sites, de vários clientes e fica inviável ter um "servidor Web" para cada "case". O resultado é que criamos um diretório para cada projeto dentro do diretório raiz do site. Até aí, ok! O problema começa quando precisamos acessar o site que está sendo editado, via navegador, pelo endereço "http://localhost/".

Todos os exemplos seguintes serão baseados no XAMPP para Windows (Sim! Sou um porco capitalista!). Se você usa o Apache noutro pacote ou plataforma, adapte seu case.

Finge que "localhost" é "meusite.com.br"...

Um "Servidor Web" está para nosso provedor de hospedagem, assim como o endereço "http://localhost/" está para o endereço do nosso site na Internet, como por exemplo "http://meusite.com.br/". Se pensarmos desta forma - que é a correta - ao acessar o site do seu cliente do "PetShop" pelo servidor Web local, você digita no navegador "http://localhost/petshop/", correto? Já que você salva os arquivos deste site no diretório raiz ("htdocs" do XAMPP).

Acontece que todos os sites, na verdade, são referenciados como um só: "http://meusite.com.br/" e eles são subdiretórios deste site. Daí, quando você transferir o site do "PetShop", por exemplo, do servidor Web local para o provedor de hospedagem lá na Internet? O endereço do site ficará "http://petshot.com.br/petshop/"? E como ficaram os caminhos dos seus link, href e src?

Eu, pessoalmente, prefiro usar caminhos absolutos nos meus sites, onde a "/" representa a raiz do site. Por exemplo, para fazer um link para a home page (index.php), basta codificar:

<a href="/">HOME</a>

Isso vale para qualquer página do site, mesmo aquelas que estão dentro de subdiretórios.

E para mostrar o logotipo, em QUALQUER página do site:

<img src="/img/logo.png" alt="Logotipo">

Isso funcionaria se você armazenasse o site diretamente na pasta raiz do servidor (htdocs ou www), mas não é o que acontece. Se você desenvolveu o site em um subdiretório "PetShop" do diretório raiz, por exemplo, para criar um link para a home page você teria que usar caminhos relativos e fazer algo como:

<a href="../index.php">HOME</a>

E para o logotipo de uma página qualquer que está em um subdiretório, por exemplo, poderíamos ter algo como:

<img src="../../img/logo.png" alt="Logotipo">

Percebeu as diferenças?

Solução 1) Uma raiz para cada site

Quando eu percebi que a metodologia de vários subdiretórios dentro da raiz não daria certo, criei uma alternativa: passei a ter um diretório "htdocs" para cada site. Assim, no XAMPP, que é o pacote que uso, tinha vários diretórios, como:

  • C:\xampp\htdocs petshop.com.br
  • C:\xampp\htdocs sexshop.com.br
  • C:\xampp\htdocs bardozizinho.com

Criei uma rotina louca: quando vou trabalhar no site "petshop.com.br", por exemplo, renomeio o diretório "C:\xampp\htdocs petshop.com.br" para "C:\xampp\htdocs", que o Apache reconhece como a raiz do site.

Agora, preciso trabalhar no "bardozizinho.com"? Renomeio então "C:\xampp\htdocs" para "C:\xampp\htdocs petshop.com.br" novamente e então "C:\xampp\htdocs bardozizinho.com" para "C:\xampp\htdocs". E o site do "bardozizinho.com" está no ar...

Entendeu a dinâmica? Complicado, mas, pra ganhar ($) dinheiro, agente se adapta!

Solução 2) Subdomínios com Wildcard

Todo esse troca-troca de nomes de diretórios que vimos acima pode se tornar cansativo e se você está cansado + estressado, pode acabar cometendo erros como salvar o "SexShop" no lugar do "PetShop", entregando assim o produto errado para o cliente.

Foi daí que, um belo dia, preparando algumas aulas de servidor Web com Apache, me lembrei que esse poderoso Web Server suporta subdomínios, redirecionamentos e "Wildcards". E, quem é o nosso servidor Web favorito? Sim, justamente o Apache!

Voltamos à situação anterior, onde cada site ocupa um subdiretório da raiz (htdocs...), só que agora, assim:

  • C:\xampp\htdocs\petshop
  • C:\xampp\htdocs\sexshop
  • C:\xampp\htdocs\bardozizinho

Depois de configurar o Apache, para acessar cada site com seu próprio domínio, usamos:

  • http://petshop.localhost/
  • http://sexshop.localhost/
  • http://bardozizinho.localhost/

Cada site agora tem seu próprio endereço na forma de um subdomínio independente e também sua própria "raiz" no servidor Web, então, podemos voltar a usar caminhos absolutos nos links.

A configuração é razoavelmente simples e só precisa ser feita uma vez:

Abra o arquivo de configuração do "Apache" em um editor. Esse arquivo, normalmente se chama "httpd.conf" e costuma ficar no subdiretório "C:\xampp\apache\conf", no caso do XAMPP do Windows. Se você é "estranho" e não usa o XAMPP ou o Windows, procure este arquivo dentro do diretório do seu servidor Web, que vai encontrá-lo.

Com ele aberto, localize a linha abaixo e descomente-a removendo o "#" que está no começo. Ficará assim:

LoadModule vhost_alias_module modules/mod_vhost_alias.so

Também localize e remova o “#” do começo da linha:

Include conf/extra/httpd-vhosts.conf

Agora, localize e abra o arquivo "httpd-vhosts.conf" que normalmente fica dentro do diretório "C:\xampp\apache\conf\extra". Com ele aberto, apague todo o seu conteúdo, substituindo por:

UseCanonicalName Off
<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs/"
    ServerName localhost
</VirtualHost>
<VirtualHost *:80>
    ServerAlias *.localhost
    VirtualDocumentRoot "C:/xampp/htdocs/%1/"
</VirtualHost>

Salve e feche os arquivos abertos e reinicie o Apache, conforme seu sistema permitir.

E... Pronto!

Cada site com seu endereço e sua própria 'raiz'.
Cada site com seu endereço e sua própria "raiz".

Dicas finais

Além dos "Wildcards" podemos usar outros recursos como os "VirtualHosts" do Apache, mas acho que já foge da necessidade de um desenvolvedor tradicional, portanto, veremos em outra oportunidade.

Os subdomínios com Wildcard funcionam em qualquer compilação do Apache em que o módulo mod_vhost_alias esteja presente, o que é a maioria dos casos. Mesmo se você não usa um pacote AMP (Apache + MySQL + PHP), preferindo instalações "stand-alone" dos serviços "Apache", "MySQL" e "PHP", a dica funciona. Agora mesmo, estou testando no Debian Linux 10 (sim, sou estranho!) e funciona perfeitamente.

Ao clicar em "Aceitar cookies", você concorda que o CataBits pode guardar cookies no seu dispositivo e utilizar essas informações de acordo com as nossas Políticas de Cookies.
Aceitar cookies!
Não aceito!