¿Cómo hago para que Apache sirva una sola página estática sin importar cuál sea la URL ingresada?

9

Estoy haciendo un anuncio que bloquea el servidor DNS que redirige todos los dominios de publicidad a una instancia de Apache . Entonces algo como

www.addomain.com

se redirige a

dnsserver.localnetwork

Sin embargo, ocasionalmente encuentro enlaces más como

www.addomain.com/some_ad

que se redirige a

dnsserver.localnetwork/some_ad

que ni siquiera existe y, por lo tanto, genera un 404error.

Esperaba que hubiera alguna forma de hacer que Apache sirviera index.html, independientemente de la solicitud real. De lo contrario, si tiene una solución alternativa que no involucra a Apache, también estoy preparado para eso.

sayantankhan
fuente
1
Podrías echar un vistazo a apaches mod_rewrite. Redireccionar todo desde después del dominio a /index.html
rechengehirn
Esto parece una forma ineficiente de hacer bloqueos publicitarios.
Panther
@ bodhi.zazen ¿Cómo lo harías? La mayoría de los bloqueadores de anuncios funcionan con un concepto similar. Bloquee o redirija las solicitudes a los dominios publicitarios. Estaré encantado de implementar una mejor alternativa si tienes una.
sayantankhan
1
Para ser honesto, uso noscript y los complementos predeterminados de adblock. Si eso no es suficiente, puede usar un archivo de hosts (requiere trabajo para mantenerlo) o un proxy (privoxy), pero nuevamente se necesita más trabajo para mantener una lista negra usted mismo. Consulte addons.mozilla.org/en-US/firefox/addon/noscript y addons.mozilla.org/en-US/firefox/addon/adblock-plus , es posible que necesite alternativas según su navegador.
Panther

Respuestas:

18

En Ubuntu, asegúrese de que mod_aliasesté habilitado:

sudo a2enmod alias

Luego, en su directiva VirtualHost puede usar AliasMatch.

Ejemplo:

<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>

Ahora todo se redirige a /index.html.

rechengehirn
fuente
Mi JS, CSS e imágenes también se están redirigiendo con esta solución. ¿Hay alguna manera de evitar esto sin hacer una gran expresión regular que verifique la extensión de la solicitud?
Ameo
8

Necesita una regla de reescritura en su archivo .htaccess. Algo como lo siguiente debería funcionar:

RewriteRule ^*$  http://www.addomain.com/index.html [R=301,NC,L]
Tom Damon
fuente
Eso hace una redirección. No sirve directamente index.html.
argot
1

Otra opción más simple sería cambiar la página de error 404 a la página estática que desea mostrar para todas las páginas de su sitio. Entonces, busque esta línea (o algo similar) en sus archivos de configuración de apache2:

ErrorDocument 404 /errors/not_found.html

Y cambie el "/errors/not_found.html" a: "/index.html"

brfox
fuente