在 Web 服务器文档目录中包含活动内容(如脚本和可执行文件)有时被认为是不安全的做法。如果由于某些配置错误,脚本没有被执行,而是作为常规 HTML 文档显示,这可能会导致知识产权或安全信息(如密码)泄露。因此,许多系统管理员更愿意为脚本设置另一个目录结构,这些脚本只能通过 PHP CGI 访问,因此始终被解释,而不是以这种方式显示。
此外,如果使用上一节中描述的方法来确保请求没有被重定向,则必须设置与 Web 文档根目录不同的脚本 doc_root。
可以通过配置指令 doc_root 在 配置文件 中设置 PHP 脚本文档根目录,或者可以设置环境变量 PHP_DOCUMENT_ROOT。如果设置了它,PHP 的 CGI 版本将始终使用此 doc_root
和请求中的路径信息构建要打开的文件名,因此可以确保没有脚本在该目录之外执行(除了下面的 user_dir
)。
这里可以使用另一个选项 user_dir。当 user_dir 未设置时,控制打开的文件名的唯一因素是 doc_root
。打开类似 http://my.host/~user/doc.php 的 URL 不会导致在用户主目录下打开一个文件,而是在 doc_root 下打开一个名为 ~user/doc.php 的文件(是的,一个以波浪号 [~
] 开头的目录名)。
如果 user_dir 设置为例如 public_php,类似 http://my.host/~user/doc.php 的请求将打开用户主目录下的名为 public_php 的目录下的名为 doc.php 的文件。如果用户的主目录是 /home/user,则执行的文件是 /home/user/public_php/doc.php。
user_dir
扩展无论 doc_root
设置如何都会发生,因此可以分别控制文档根目录和用户目录访问。