如何设置 Apache 2 仅服务于子目录

如何设置 Apache 2 仅服务于子目录

我有 3 个网站需要托管在 Web 服务器(运行在 Ubuntu 12.04 上的 repo 中的 apache2)上。它们各自位于/var/www/

我希望 apache 仅在 URL 中给出目录名称时才提供来自相关目录的文件,但是不是为目录本身提供服务/var/www/

例如:http://1.2.3.4/site1/应该工作并提供来自的索引/var/www/site1/index.html,但http://1.2.3.4/不应该提供任何服务。

目前,我无法让 URL 指向目录。我既可以为http://1.2.3.4/其中的所有内容提供服务/var/www/(包括/var/www/site2/secretstuff/),也可以让根目录http://1.2.3.4/为其中一个子目录提供服务(/var/www/site1/)。这是不可接受的,站点 1 需要启用索引,但其他站点则不需要。

我只是想让 site1 的配置只响应表单的请求http://1.2.3.4/site1/*,而不处理表单的请求http://1.2.3.4/

我没有设置域名,所以无法使用子域名。

答案1

只需采用简单的解决方法:输入一个index.html空白/var/www

touch /var/www/index.html

转到顶层只会导致出现一个空白页。

答案2

很难说你到底需要什么,也许你需要发布 httpd.conf?

你想让根 URL 转到 404 吗?也许可以尝试

重定向匹配 404 ^/$

对于另一部分,这可能会有所帮助:

http://httpd.apache.org/docs/2.2/urlmapping.html#documentroot

答案3

我需要用 Alias /site1 /var/www/site1/ 替换站点 1 配置的 DirectoryRoot

答案4

如果您可以更改 IPTABLES 设置:

iptables -I INPUT -d <server IP> -p tcp --dport 80 -m string --to 70 \
--algo bm --string 'GET / HTTP' -j DROP

这不会终止对 /file 的请求,但任何直接在 / 请求根的内容都将不被允许访问。

或者,您可以为想要运行的页面制定几个允许规则,并制定一个阻止根的规则:

iptables -I INPUT -d <server IP> -p tcp --dport 80 -m string --to 70 \
--algo bm --string 'GET /' -j DROP
iptables -I INPUT -d <server IP> -p tcp --dport 80 -m string --to 70 \
--algo bm --string 'GET /site1' -j ACCEPT
iptables -I INPUT -d <server IP> -p tcp --dport 80 -m string --to 70 \
--algo bm --string 'GET /site2' -j ACCEPT
iptables -I INPUT -d <server IP> -p tcp --dport 80 -m string --to 70 \
--algo bm --string 'GET /site3' -j ACCEPT

相关内容