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