我注意到许多示例 Apache 配置文件(以及我的安装附带的配置文件)都有类似的块:Options FollowSymLinks AllowOverride None
但我无法理解或找到解释这是为了什么。我的意思是,Web 服务器在文档根目录以外的任何目录中会做什么?
答案1
<Directory />
实际上并不是指文档根目录,而是指文件系统root。因此,创建<Directory />
块是一种指定适用于服务器上任何位置的所有文件和目录的指令的方法。它基本上充当默认设置。
这个想法是,你不希望有人能够通过上传 .htaccess 文件等方式入侵你的服务器,而你只是因为你忘记禁用某个目录中的 .htaccess 文件。因此,你首先要禁用 .htaccess 文件到处,那么您不必担心。您仍然可以使用AllowOverride
针对特定目录的指令在需要它们的地方启用它们。 也是如此Options
:其中之一是ExecCGI
,它允许在特定目录中执行 CGI 脚本。显然,您不希望系统上的任何随机程序可以作为 CGI 脚本运行;您希望将它们保存在为此目的而设置的特定目录中。因此,在块中省略ExecCGI
会Options
禁用<Directory />
整个文件系统的 CGI 执行,然后您只需为想要的目录启用它即可。
不过,有一些方法可以生成不来自文件系统文件的内容……例如mod_status
,它会动态创建服务器正在执行的操作的报告。类似的东西不会受到<Directory />
块的影响。因此,如果您有非文件特定的指令,而您确实想将其应用于所有的服务器(即它所服务的所有内容),您可以使用<Location />
。