Как заставить Apache обслуживать одну статическую страницу независимо от того, какой введенный URL-адрес?

9

Я делаю DNS-сервер блокировки рекламы, который перенаправляет все рекламные домены на экземпляр Apache . Так что-то вроде

www.addomain.com

перенаправляется на

dnsserver.localnetwork

Тем не менее, иногда я сталкиваюсь с ссылками, как

www.addomain.com/some_ad

который перенаправляется на

dnsserver.localnetwork/some_ad

который даже не существует и, следовательно, вызывает 404ошибку.

Я надеялся, что будет какой-то способ заставить Apache работать index.html, независимо от фактического запроса. В противном случае, если у вас есть альтернативное решение, не связанное с Apache, я тоже за это.

sayantankhan
источник
1
Вы можете взглянуть на apaches mod_rewrite. Перенаправление всего с домена после /index.html
rechengehirn
Это кажется неэффективным способом сделать блокировку рекламы.
Пантера
@ bodhi.zazen Как бы вы это сделали? Большинство рекламодателей работают по схожей концепции. Блокируйте или перенаправляйте запросы на рекламные домены. Я буду рад реализовать лучшую альтернативу, если у вас есть.
Саянтанхан
1
Если честно, я использую noscript и плагины по умолчанию для adblock. Если этого недостаточно, то вы можете использовать файл hosts (требует поддержки для обслуживания) или прокси (privoxy), но опять же, вам нужно больше усилий для поддержания черного списка самостоятельно. См. Addons.mozilla.org/en-US/firefox/addon/noscript и addons.mozilla.org/en-US/firefox/addon/adblock-plus , вам могут потребоваться альтернативы в зависимости от вашего браузера.
Пантера

Ответы:

18

В Ubuntu убедитесь, что mod_aliasвключен:

sudo a2enmod alias

Тогда в вашей директиве VirtualHost вы можете использовать AliasMatch.

Пример:

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

Теперь все перенаправлено на /index.html.

rechengehirn
источник
Мой JS, CSS и изображения также перенаправляются с этим решением. Есть ли способ предотвратить это, не выполняя большого регулярного выражения, проверяющего расширение запроса?
Амео
8

Вам нужно переписать правило в вашем файле .htaccess. Должно работать что-то вроде следующего:

RewriteRule ^*$  http://www.addomain.com/index.html [R=301,NC,L]
Том Дэймон
источник
Это делает редирект. Он не обслуживает напрямую index.html.
сленг
1

Другой более простой вариант - изменить страницу ошибки 404 на статическую, которую вы хотите показывать для всех страниц вашего сайта. Итак, поищите эту строку (или что-то похожее) в ваших конфигурационных файлах apache2:

ErrorDocument 404 /errors/not_found.html

И измените "/errors/not_found.html" на: "/index.html"

brfox
источник