拒绝访问根目录,但允许访问默认页面的 DirectoryIndex

拒绝访问根目录,但允许访问默认页面的 DirectoryIndex

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

相关内容