Crie vários sites em uma única instância do apache

0

Eu preciso ter vários sites locais no apache. Então eu adiciono um host virtual para cada um:

#/etc/apache2/sites-available/example.com:
<VirtualHost 127.0.0.1:80>
        ServerAdmin [email protected]
        ServerName  www.example.com
        ServerAlias example.com

        # Indexes + Directory Root.
        DirectoryIndex index.php
        DocumentRoot /var/www/example.com/htdocs/

        # CGI Directory
        ScriptAlias /cgi-bin/ /var/www/example.com/cgi-bin/
        <Location /cgi-bin>
                Options +ExecCGI
        </Location>


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

E então eu faço sudo a2ensite example.com e sudo service apache2 restart . O problema é que os caminhos relativos à raiz não funcionam. Por exemplo, quando digo <link href="/css/somefile.css" rel="stylesheet"> em algum lugar em /var/www/example.com/htdocs/index.php , o apache não veicula /var/www/example.com/htdocs/css/somefile.css no navegador (navegação: localhost/example.com/htdocs )

O que eu sinto falta?

    
por sorush-r 04.12.2013 / 21:23

2 respostas

2

Eu acho que o problema é que você acessa o site com localhost / example.com / htdocs

Você pode fazer o seguinte:

Em seu switch de configuração de vhost, ServerName e ServerAlias:

ServerName  example.com
ServerAlias www.example.com

reinicie o apache2 com:

sudo /etc/init.d/apache2 restart

Agora, em / etc / hosts, adicione as duas linhas:

127.0.0.1 example.com
127.0.0.1 www.example.com

Você agora pode acessar o site com www.example.com ou example.com. (Isso funciona se você estiver trabalhando na mesma máquina em que você instalou o seu apache)

E o seu caminho deve funcionar como esperado.

Por favor, comente, se tiver algum problema.

    
por rechengehirn 05.12.2013 / 09:07
0

Ah! Eu acho que entendi seu problema ...

A tag de link pode usar um caminho completo, mas o caminho completo começa na raiz do documento:

<link href="/css/somefile.css" .../>

O caminho completo no disco ( /var/www/example.com/htdocs/css/somefile.css ) não funcionaria de fato.

O que o Apache faz é isso:

DocumentRoot /var/www/example.com/htdocs/
+
<link href="/css/somefile.css" .../>
=
/var/www/example.com/htdocs/css/somefile.css

O DocumentRoot é um tipo de diretório raiz virtual (/) no que diz respeito ao site. Isso impede que seus visitantes acessem arquivos aos quais nunca devem ter acesso (pense em um arquivo como: /etc/passwd )

    
por Alexis Wilke 05.12.2013 / 00:06