DNS Wildcard, VirtualHosts no apache2, 404 para subdomínios não utilizados

5

Em um servidor Apache2 vinculado por um DNS que inclui uma entrada curinga, por exemplo * .example.com, subdomínios que não são definidos como ServerNames em qualquer VirtualHosts apontam para o primeiro VirtualHost definido, no meu exemplo isso é 000-default.

Minha pergunta:

Como é possível obter subdomínios não utilizados (subdomínios não usados em qualquer host virtual) para retornar um erro 404 para o cliente solicitante? Isso deve, de preferência, aparecer nos logs do servidor como um 404 também.

Analisei as seguintes possibilidades:

  • Redirecionar qualquer subdomínio inválido para a página inicial ou alguma outra página.

    O problema com esse método é que, quando alguém faz um link para seu site como this.company.sucks.example.com, o cliente veja sua home page ou no meu caso 000-default se eu não redirecionar. Obrigado, ao Mike por apontar isso. (regex para "chupar", etc definitivamente não é uma opção)

  • Deixe o VirtualHost padrão apontar para um diretório inexistente.

    O Apache não gosta desse bit, avisando a cada recarga. Além do aviso, tudo parece bem. Isso parece um hack. Isso parece um problema (por menor que seja) para alguém?

  • Aponte o VirtualHost padrão para uma pasta onde o index.php é proibido, criando assim um código de status 403.

    Isso é confuso e torna as coisas como as seguintes, muito complicadas: digamos, por exemplo, você use um subdomínio por usuário (um grande motivo para usar DNS curinga, aparentemente), e os usuários têm a capacidade de visualizar os perfis uns dos outros em username.example.com. Esta solução é confusa para o usuário e completamente não é o que eu quero fazer.

Minha solução ideal permitirá que o usuário saiba que não há nada para ver na URL em que ele entrou. De preferência com um 404 e uma entrada de log de erro para o endereço inserido (não algum outro endereço).

Qualquer ajuda seria muito apreciada!

    
por Niel Thiart 22.10.2009 / 18:11

3 respostas

3

Recentemente tive o mesmo problema e não consegui encontrar uma alma até agora. A melhor opção acaba por estar usando

Redirect 404 /

ou (como sugerido anteriormente)

RedirectMatch 404 /.*

diretiva no vhost padrão (primeiro), que obviamente deve ser não utilizado. O vhost pode potencialmente ser um 'falso', então algo como seguir no início do seu arquivo de configuração vhost:

<VirtualHost *:80>
ServerName default #fake name, unused domains default here
Redirect 404 /
</VirtualHost>

<VirtualHost *.80>
ServerName example.tld
........
</VirtualHost>

Cheira como um hack.

    
por 19.01.2010 / 16:51
2

Você pode configurar um host virtual padrão com o seguinte, de acordo com os documentos do Apache:

RedirectMatch 404 /.*

link

Deixe-me saber se não funciona.

    
por 25.10.2009 / 01:52
1

Isso pode ajudar: Eu estava tentando resolver um problema de subdomínio curinga que defini anteriormente e encontrei algum código de exemplo do webmasterworld (do onisciente jdMorgan) que parece produzir o comportamento que você está procurando (404 em non Conteúdo existente):

#jdMorgan, again
#http://www.webmasterworld.com/apache/3906038.htm

# If the request is not for the the main domain or the www subdomain
rewriteCond %{HTTP_HOST} !^(www\.)?foo\.com
# get the requested subdomain name into variable %2
rewriteCond %{HTTP_HOST} ^(www\.)?([^.]+)\.foo\.com
# and if not already rewritten to subdomain's subdirectory
rewriteCond $1 !^subdomains/
# internally rewrite to prefix "/subdomains/<subdomain-name>/" to the client-requested URL-path
rewriteRule ^(.*)$ /subdomains/%2/$1 [L]

Se houver arquivos em /subdomains/bar e eu navegar para http://bar.foo.com , o conteúdo será exibido. Se eu navegar para http://baz.foo.com , obtenho um 404 Not Found (e um adicional 404 informativo, como eu não especifiquei o ErrorDocument) - isso também aparece no error_log .

É isso que você procura? Usar isso permite que você veja o conteúdo não disponível no error_log ou crie uma página 404 unicamente para capturar as solicitações 404ed e registrá-las.

(Mais uma vez, você tem o jdMorgan na WMW para agradecer por isso, não eu. Esse homem realmente é uma fonte de conhecimento!)

    
por 18.01.2010 / 22:50