Jak sprawić, by Apache wyświetlał pojedynczą stronę statyczną bez względu na wprowadzony adres URL?


9

Tworzę reklamę blokującą serwer DNS, który przekierowuje wszystkie domeny reklamowe do instancji Apache . Coś w stylu

www.addomain.com

zostaje przekierowany do

dnsserver.localnetwork

Czasami jednak spotykam linki bardziej podobne

www.addomain.com/some_ad

który zostaje przekierowany do

dnsserver.localnetwork/some_ad

który nawet nie istnieje, a zatem powoduje 404błąd.

Miałem nadzieję, że będzie jakiś sposób, aby Apache służył index.html, niezależnie od rzeczywistego żądania. W przeciwnym razie, jeśli masz alternatywne rozwiązanie, które nie obejmuje Apache, ja też jestem na to gotowa.


1
Możesz rzucić okiem na apaches mod_rewrite. Przekierowanie wszystkiego od domeny po /index.html
rechengehirn

To wydaje się być nieefektywnym sposobem blokowania reklam.
Panther

@ bodhi.zazen Jak byś to zrobił? Większość adblockerów pracuje na podobnej koncepcji. Blokuj lub przekierowuj żądania do domen reklamowych. Z przyjemnością wprowadzę lepszą alternatywę, jeśli ją masz.
sayantankhan

1
Szczerze mówiąc, używam noscript i domyślnych wtyczek adblock. Jeśli to nie wystarczy, możesz albo użyć pliku hosts (zajmuje się utrzymaniem), albo proxy (privoxy), ale znowu potrzeba więcej pracy, aby samodzielnie utrzymać czarną listę. Zobacz addons.mozilla.org/en-US/firefox/addon/noscript i addons.mozilla.org/en-US/firefox/addon/adblock-plus , w zależności od przeglądarki mogą być potrzebne alternatywy.
Panther

Odpowiedzi:


18

W Ubuntu upewnij się, że mod_aliasjest włączony:

sudo a2enmod alias

Następnie możesz użyć dyrektywy VirtualHost AliasMatch.

Przykład:

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

Teraz wszystko zostaje przekierowane na /index.html.


Moje JS, CSS i obrazy są również przekierowywane dzięki temu rozwiązaniu. Czy jest jakiś sposób, aby temu zapobiec bez robienia dużego wyrażenia regularnego sprawdzającego rozszerzenie żądania?
Ameo

8

Potrzebujesz reguły przepisywania w pliku .htaccess. Powinno działać coś takiego:

RewriteRule ^*$  http://www.addomain.com/index.html [R=301,NC,L]

To powoduje przekierowanie. Nie obsługuje bezpośrednio index.html.
slang

1

Inną prostszą opcją byłaby zmiana strony błędu 404 na stronę statyczną, którą chcesz wyświetlać dla wszystkich stron w witrynie. Więc poszukaj tej linii (lub czegoś podobnego) w plikach konfiguracyjnych apache2:

ErrorDocument 404 /errors/not_found.html

I zmień „/errors/not_found.html” na: „/index.html”

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.