Como obter o apache para enviar um 404 baseado em nenhuma seção correspondente do VirtualHost (baseada em ServerName) sendo encontrada?

2

Estou reconstruindo um servidor antigo. Apenas um dos cinco sites antigos precisa ser publicado e todos os cinco sites antigos apontam para o mesmo endereço IP.

Infelizmente, sempre que uma solicitação é feita para um dos sites antigos por meio de seus próprios nomes de domínio exclusivos, eles passam as páginas do site que estou tentando criar. Gostaria apenas que os sites antigos exibissem um 404 em vez do site que estou tentando fazer ao vivo.

Como exemplo:

  • Site 1 (192.168.0.1) [www.first.com]
  • Site 2 (192.168.0.1) [www.second.com]
  • Site 3 (192.168.0.1) [www.third.com]

Quero mover o site 1 ao vivo novamente. Então eu liguei o apache na máquina com o endereço IP 192.168.0.1, com todos os arquivos do site 1 no diretório / var / www. Quando eu navego para 192.168.0.1 ou www.first.com eu vejo corretamente o site 1. Quando eu navego para www.second.com e www.third.com eu também recebo o site 1, que é o problema.

Existe alguma maneira que eu posso 404 qualquer pedido que vem sem www.first.com?

Aqui estão os meus sites disponíveis:

NameVirtualHost *:80

LogFormat "%h %l %u %t \"%r\" %>s %b" common

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>

<Directory />
  Order Deny,Allow
  Deny from all
  Options None
  AllowOverride None
  Options None
</Directory>

<Directory /var/www>
  Order Allow,Deny
  Allow from all
</Directory>

<VirtualHost *:80>
        ServerName first.com
        ServerAlias www.first.com
        DocumentRoot /var/www
        ErrorLog /var/log/first.com.err
        CustomLog /var/log/first.com.log common
</VirtualHost>

<VirtualHost _default_:*>
        ServerName unknown
        DocumentRoot /var/www_404
</VirtualHost>
    
por InvertedAcceleration 18.03.2011 / 17:46

2 respostas

3

Uma solicitação sem correspondência ServerName ou ServerAlias será atendida pelo primeiro bloco a ser carregado. basta mover o seu VirtualHost 404'ing para o topo (suas ligações devem corresponder ao que ele está jogando por padrão, então defina-o como *:80 - o vhost com curingas não receberá nenhuma solicitação sem isso.)

    
por 18.03.2011 / 17:52
1

Para o VirtualHost padrão, tente o seguinte (na parte superior, não na parte inferior, como você o tem):

<VirtualHost _default_:*>
    DocumentRoot /var/www_404
</VirtualHost>

Caso contrário, ele tentará procurar um servidor chamado "Desconhecido" se você o tiver na parte inferior; -)

Alternativamente, você pode simplesmente especificar o DocumentRoot fora de suas diretivas VirtualHost para definir um local padrão, conforme especificado na documentação do Apache aqui

EDIT: correção menor sobre o posicionamento

    
por 18.03.2011 / 17:52

Tags