这种语法似乎阻止 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 执行)。