![拒绝访问根目录,但允许访问默认页面的 DirectoryIndex](https://linux22.com/image/799888/%E6%8B%92%E7%BB%9D%E8%AE%BF%E9%97%AE%E6%A0%B9%E7%9B%AE%E5%BD%95%EF%BC%8C%E4%BD%86%E5%85%81%E8%AE%B8%E8%AE%BF%E9%97%AE%E9%BB%98%E8%AE%A4%E9%A1%B5%E9%9D%A2%E7%9A%84%20DirectoryIndex.png)
我试图拒绝访问根目录,同时允许访问某些文件(以 .html 和 .js 结尾)并指定 DirectoryIndex,以便对目录的请求将以默认页面响应。
已经检查过这些事情:
-Apache/2.2.14 可以读取其目录根目录。
-DocumentRoot 文件存在。
-没有其他配置相同目录的目录设置
这是我尝试过的更明确的配置之一。
<VirtualHost *:80>
ServerName myserver.com
DocumentRoot /var/www/client
DirectoryIndex app.html
<Directory /var/www/client>
AllowOverride None
Options +Indexes
Order Allow,Deny
Deny from all
<Files ~ "\.(js|html)$">
Order Deny,Allow
Allow from all
</Files>
</Directory>
</VirtualHost>
给出 403。我尝试了几种排列,试图尽可能明确地使用指令。我尝试了allow from all
目录以证明没有冲突的规则,并且 DirectoryIndex 工作正常(提供 app.html)。使用上述配置,我可以获取 /app.html,只是没有将其作为对“/”的请求的默认设置。
这是我最终为了达到预期效果所做的事情。
<VirtualHost 127.0.0.0:80>
ServerName example.com
DocumentRoot /var/www/client
AliasMatch ^/$ /var/www/client/app.html
<Directory /var/www/client>
AllowOverride None
Order Allow,Deny
Deny from all
<Files ~ "\.(js|html)$">
Order Deny,Allow
Allow from all
</Files>
</Directory>
<VirtualHost>
有没有更好的方法来实现我的目标?DirectoryIndex 不适用于 吗?
答案1
使用 AliasMatch 是实现您想要的一个好方法。
DirectoryIndex 之所以不能满足您的要求,是因为该Files
指令查看了浏览器发出的请求,而该请求不包含 .html 或 .js。该AliasMatch
指令将确保在到达指令之前重写请求Files
- 但 DirectoryIndex 并未在适当的上下文中发生,因此指令无法捕获它Files
。