Apache HTTP Server 版本2.2
Apache模块 mod_dir
说明 | 指定目录索引文件以及为目录提供"尾斜杠"重定向 |
---|---|
状态 | 基本(B) |
模块名 | dir_module |
源文件 | mod_dir.c |
概述
目录的索引可以有两个来源:
- 一个由用户编写的文件,通常叫:
index.html
。mod_dir
提供的DirectoryIndex
指令用于设置这个文件名。 - 由服务器产生的一个列表。该功能由
mod_autoindex
提供。
这两个功能是相互独立的,所以你可以完全去除或替换索引的自动生成。
因为对目录的请求需要以一个"/"结尾,所以当服务器接收到对 http://servername/foo/dirname
的请求时,若dirname
是一个目录,则mod_dir
将会将其重定向到 http://servername/foo/dirname/
。
DirectoryIndex 指令
说明 | 当客户端请求一个目录时寻找的资源列表 |
---|---|
语法 | DirectoryIndex local-url [local-url] ... |
默认值 | DirectoryIndex index.html |
作用域 | server config, virtual host, directory, .htaccess |
覆盖项 | Indexes |
状态 | 基本(B) |
模块 | mod_dir |
DirectoryIndex
指令设置了当客户端在请求的目录名的末尾刻意添加一个"/"以表示请求该目录的索引时,服务器需要寻找的资源列表。Local-url(%已解码的)是一个相对于被请求目录的文档的URL(通常是那个目录中的一个文件)。可以指定多个URL,服务器将返回最先找到的那一个。若一个也没有找到,并且那个目录设置了Indexes
选项,服务器将会自动产生一个那个目录中的资源列表。
示例
DirectoryIndex index.html
上例配置指示对 http://myserver/docs/
的请求返回 http://myserver/docs/index.html
(若存在),或返回该目录下所有资源的列表。
注意,指定的文档不一定必须位于被请求的目录下,也可以指定一个绝对URL来指向其他位置:
DirectoryIndex index.html index.txt /cgi-bin/index.pl
这样的设置将导致在index.html
或index.txt
都不存在的情况下执行CGI脚本/cgi-bin/index.pl
。
DirectorySlash 指令
说明 | 打开或关闭目录结尾斜线(/)自动补全功能 |
---|---|
语法 | DirectorySlash On|Off |
默认值 | DirectorySlash On |
作用域 | server config, virtual host, directory, .htaccess |
覆盖项 | Indexes |
状态 | 基本(B) |
模块 | mod_dir |
兼容性 | 仅在 Apache 2.0.51 及以后的版本中可用 |
DirectorySlash
指令决定mod_dir
是否通过在请求的URL结尾补上"/"使其重定向到其所指向的目录。
典型的,如果用户请求一个结尾没有"/"的资源,并且该资源指向一个目录,mod_dir
将通过在请求的URL结尾补上"/"使其重定向到其所指向的目录。默认开启自动补全功能有以下原因:
- 用户最后使用了规范的URL来请求资源。
mod_autoindex
将会正确工作。因为它不会自动补全路径,所以将会指向错误的路径。DirectoryIndex
将只评估有"/"结尾的目录。- html页面中的相对URL引用将会正确工作。
如果你不希望这个自动补全功能生效,并且不在乎上述原因,你可以关闭它:
# 请参见下面的安全警告
<Location /some/path>
DirectorySlash Off
SetHandler some-handler
</Location>
安全警告
关闭目录自动重定向可能会导致信息泄漏。考虑mod_autoindex
被激活(Options +Indexes
)并且DirectoryIndex
也正确设置到一个资源(比如:index.html
)同时没有其他处理器用于URL的情况。此时,以"/"结尾的URL将得到index.html
文件,而不以"/"结尾的请求将得到目录列表。