Como faço para o Apache exibir uma única página estática, independentemente da URL inserida?

9

Estou criando um servidor DNS de bloqueio de propaganda que redireciona todos os domínios de propaganda para uma instância do Apache . Então, algo como

www.addomain.com

é redirecionado para

dnsserver.localnetwork

No entanto, ocasionalmente, encontro links mais parecidos

www.addomain.com/some_ad

que é redirecionado para

dnsserver.localnetwork/some_ad

que nem existe e, portanto, gera um 404erro.

Eu esperava que houvesse alguma maneira de fazer o Apache servir index.html, independentemente da solicitação real. Caso contrário, se você tiver uma solução alternativa que não envolva o Apache, eu também aceito.

sayantankhan
fonte
11
Você pode dar uma olhada nos apaches mod_rewrite. Redirecionando tudo, desde após o domínio para /index.html
rechengehirn
Parece uma maneira ineficiente de fazer o bloqueio de anúncios.
Panther
@ bodhi.zazen Como você faria isso? A maioria dos bloqueadores de anúncios trabalha com um conceito semelhante. Bloqueie ou redirecione as solicitações para os domínios de publicidade. Ficarei feliz em implementar uma alternativa melhor se você tiver uma.
sayantankhan
11
Para ser sincero, eu uso o noscript e os plugins padrão do adblock. Se isso não for suficiente, você poderá usar um arquivo de hosts (exige trabalho para manter) ou um proxy (privoxy), mas, novamente, é preciso mais trabalho para manter você mesmo uma lista negra. Consulte addons.mozilla.org/en-US/firefox/addon/noscript e addons.mozilla.org/en-US/firefox/addon/adblock-plus . Você pode precisar de alternativas, dependendo do seu navegador.
Panther

Respostas:

18

No Ubuntu, verifique se mod_aliasestá ativado:

sudo a2enmod alias

Em sua diretiva VirtualHost, você pode usar AliasMatch.

Exemplo:

<VirtualHost *:80>
    DocumentRoot /path/to/your/host
    ServerName yourdomain.com
    DirectoryIndex index.html

    AliasMatch ^/(.*)$ /path/to/your/host/index.html

    <Directory "/path/to/your/host">
      Require all granted
    </Directory>
</VirtualHost>

Agora tudo é redirecionado para /index.html.

rechengehirn
fonte
Meu JS, CSS e imagens estão sendo redirecionados também com esta solução. Existe alguma maneira de evitar isso sem fazer uma grande regex que verifique a extensão da solicitação?
Ameo
8

Você precisa de uma regra de reescrita no arquivo .htaccess. Algo como o seguinte deve funcionar:

RewriteRule ^*$  http://www.addomain.com/index.html [R=301,NC,L]
Tom Damon
fonte
Isso faz um redirecionamento. Não serve diretamente index.html.
gíria
1

Outra opção mais simples seria alterar a página de erro 404 para a página estática que você deseja mostrar para todas as páginas do seu site. Portanto, procure esta linha (ou algo semelhante) nos arquivos de configuração do apache2:

ErrorDocument 404 /errors/not_found.html

E altere "/errors/not_found.html" para: "/index.html"

brfox
fonte