Apache não servindo arquivos de onde esperado

2

Eu tenho a seguinte configuração do host virtual:

<VirtualHost *>
    ServerName books.domain.com
    ServerAlias ebooks.domain.com
    DocumentRoot /home/media/books/
    <Directory /home/media/books>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
    ErrorLog /home/domain.com/logs/error.log
    CustomLog /home/domain.com/logs/access.log combine
    ServerSignature Off
</VirtualHost>
<VirtualHost *>
    ServerName domain.com
    ServerAlias domain.info domain.net domain.org *.domain.com *.domain.info *.domain.net *.domain.org
    DocumentRoot /home/domain.com/public_html/
    <Directory /home/domain.com/public_html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
    ErrorLog /home/domain.com/logs/error.log
    CustomLog /home/domain.com/logs/access.log combine
    ServerSignature Off
</VirtualHost>

domain.com é o mesmo em ambas as diretivas de host virtual

O problema é que books.domain.com está sendo servido no diretório /home/domain.com/public_html/

    
por Unkwntech 30.07.2009 / 03:54

5 respostas

1

Talvez porque você tenha a regra ServerAlias para domain.com com

*.domain.com

, que corresponderá a ebooks.domain.com e será veiculado em

/home/domain.com/public_html

Meu melhor conselho seria usar o mod_rewrite com RewriteCond %{HTTP_HOST} , mas infelizmente eu não sei o suficiente para dar mais detalhes. Dê uma olhada nos manuais / guias do mod_rewrite.

    
por 30.07.2009 / 04:03
1

Eu teria pensado que a ordem era a chave aqui, que o apache serviria o primeiro servername correspondente, mas fiz um teste rápido, e esse não parece ser o caso. Ele sempre parece corresponder ao curinga, não importa em que ordem eles estão.

O melhor que eu poderia pensar com um endereço IP é praticamente o que Evgeny sugeriu, ter um virtualhost e usar um redirecionamento de proxy para books.domain.

<VirtualHost *>
    ServerName domain.com
    ServerAlias domain.info domain.net domain.org *.domain.com *.domain.info *.domain.net *.domain.org
    DocumentRoot /home/domain.com/public_html/
    <Directory /home/domain.com/public_html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
    ErrorLog /home/domain.com/logs/error.log
    CustomLog /home/domain.com/logs/access.log combine
    ServerSignature Off

    <Directory /home/media/books>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    Alias /home/media/books /books
    RewriteRule   ^books\.domain\.com(.*)$      http://domain.com/books$1 [NC,P,L]
    RewriteRule   ^ebooks\.domain\.com(.*)$     http://domain.com/books$1 [NC,P,L]

</VirtualHost>

A única maneira em que posso pensar para preservar os curingas e os vhosts separados seria se você tivesse dois endereços IP e atribuísse os dois virtualhosts para separar endereços. Eu ainda sinto que deve haver uma maneira melhor de fazer isso, porém, estará interessado nas outras soluções.

    
por 30.07.2009 / 05:23
1

Eu acho que Evgeny acertou em cheio.

É bom saber: o valor de uma diretiva NameVirtualHost deve corresponder exatamente ao conteúdo e não deve ser um nome de host. Por exemplo, NameVirtualHost *: 80 deve ser usado com. "NameVirtualHost *: 80" deve aparecer apenas uma vez em uma configuração.

    
por 22.11.2009 / 11:37
0

Como Evgeny observou books.domain.com é servido de public_html como é exatamente o que os VirtualHosts dizem ... seu primeiro VirtualHost ServerAlias é ebooks.domain.com para servir de / home / media / books. Certifique-se de que o * .domain.com esteja sempre no último VirtualHost [que você tem], desde que algum VirtualHost anterior tenha um ServerAlias correspondente ao domínio que você digita que o VirtualHost servirá a resposta.

Se você está procurando uma solução mais completa e coringa, você pode reorganizar a estrutura de diretórios como / home / media / books, home / media / ebooks, etc., e tentar algo assim e se safar com tudo em um único VirtualHost:

DocumentRoot /home/media #make sure you have a default index page 
RewriteEngine on 
RewriteCond %{SERVER_NAME} ^(.*).domain.com [NC] # make sure this is a subdomain call 
RewriteCond /%1/ -d # is there a directory for this subdomain 
RewriteRule ^/(.*)$ /%1/ # request filename now /home/media/%1 - client URL unchanged.
    
por 30.07.2009 / 05:30
0

Você tem um "NameVirtualHost *: 80" ou similar como uma linha de configuração global?

Isso geralmente é errado quando hosts virtuais simplesmente não funcionam no Apache.

    
por 30.07.2009 / 08:24

Tags