apache-目录指令-允许提供选定的页面

apache-目录指令-允许提供选定的页面

这种语法似乎阻止 Apache 提供来自 /var/www 或子目录的任何页面。

 <Directory "/var/www">
     Allow from None
     Order allow,deny
 </Directory>

我希望这种行为成为一般规则,但有一些例外。例如,我希望用户能够访问

 /var/www  
 /var/www/css
 /var/www/js

但不是:

 /var/www/app
 /var/www/xml
 /var/www/foo
 /var/www/bar
 ... and many more

答案1

如果您不允许任何人或拒绝所有人,那么任何人都无权访问目录内容。

如果你想要比全有或全无更好的控制,你应该看看访问控制在 Apache 文档中基本上是

[ allow | deny ] from address

地址可以是域名、IP 或主机名。

答案2

你可以和目錄匹配对除部分目录之外的大多数目录设置拒绝规则。

但我认为你真正的问题是你的 Web 目录根目录 (/var/www) 中有很多文件夹,而你不希望任何人访问这些目录。那么它们为什么在这里呢?

更清洁的路径组织将是:

  • /path/to/project :项目根目录
  • /路径/到/项目/www: 该项目apache 文档根目录(文档根目录)
  • /path/to/project/www/[js|css] :一些有效的网络资产
  • /路径/到/项目/lib:应用程序库、代码
  • /path/to/project/lib/[app|xml|foo|bar] :应用程序的库,代码
  • /path/to/project/[etc|doc|var|tmp] :其他内容

Apache 无法访问 DocumentRoot 之前的任何内容,除非您设置了一些别名,但您不需要别名。所有不需要通过 URL 直接访问的内容都不应位于 DocumentRoot 下。大多数 CMS 忽略了这一基本规则,因为它们希望在非常严格的主机策略上轻松部署(您只能通过 ftp 访问文档根目录)。

这可以用任何语言完成,jsp、asp、php。你只需要一个引导程序文件(即index.php,index.jsp,index.asp)位于Web目录根目录中,任何其他资源都通过包含指令和库路径设置加载到应用程序中。

您将避免很多信息泄露问题(除了您在 js 库包中找到的所有内容之外,请确保暂停 js 资产路径上的 php 执行)。

相关内容