无论输入的URL是什么,如何使Apache服务于一个静态页面?


9

我正在制作一个广告阻止DNS服务器,该服务器将所有广告域重定向到Apache实例。所以像

www.addomain.com

重定向到

dnsserver.localnetwork

但是,偶尔我遇到的链接更像

www.addomain.com/some_ad

重定向到

dnsserver.localnetwork/some_ad

甚至不存在,因此会引发404错误。

我希望index.html无论实际请求如何,都有某种使Apache服务的方法。否则,如果您有一个不涉及Apache的替代解决方案,那么我也愿意这样做。


1
您可以看看apache mod_rewrite。将所有内容从域名后重定向到/index.html
rechengehirn 2014年

这似乎是无效的广告拦截方式。

@ bodhi.zazen你会怎么做?大多数adblocker都采用类似的概念。阻止请求或将请求重定向到广告域。如果您有一个更好的替代方案,我将非常高兴。
sayantankhan 2014年

1
老实说,我使用noscript和默认的adblock插件。如果这还不够,那么您可以使用hosts文件(需要进行维护)或代理(privoxy),但是要自己维护黑名单也需要更多的工作。请参阅addons.mozilla.org/en-US/firefox/addon/noscriptaddons.mozilla.org/en-US/firefox/addon/adblock-plus,根据您的浏览器,您可能需要替换项​​。

Answers:


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


通过此解决方案,我的JS,CSS和图像也得到了重定向。有没有什么办法可以避免这种情况,而无需做一个大的正则表达式来检查请求的扩展?
Ameo '18年

8

您的.htaccess文件中需要一个重写规则。类似于以下内容的东西应该起作用:

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

那会重定向。它不直接提供index.html。
s语

1

另一个更简单的选择是将404错误页面更改为要为站点上所有页面显示的静态页面。因此,请在apache2配置文件中查找以下行(或类似内容):

ErrorDocument 404 /errors/not_found.html

并将“ /errors/not_found.html”更改为:“ / index.html”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.