我试图拒绝访问根目录,同时允许访问某些文件(以 .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
。