Fork me on GitHub

Apache Options

Options指令是Apache配置文件中一个很常见也很重要的指令,Options指令可以在Apache服务器核心配置(server config)、虚拟主机配置(virtual host)、特定目录配置(directory)以及.htaccess文件中使用。Options指令的主要作用是控制特定目录将启用哪些服务器特性。

Options指令常见的配置示例代码如下:

<Directory />
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
    Order deny, allow
    Allow from all
</Directory>

Options指令的完整语法为:Options [+|-]option [[+|-]option] …。Options指令后可以附加指定多种服务器特性,特性选项之间以空格分隔。常见的设置选项有Indexes,Includes,FollowSymLinks(自版本2.3.11之后默认项从All变更为FollowSymLinks,),ExecCGI,MultiView,None和All。

Indexes

浏览器网址访问对应服务器上的一个文件目录时,若此目录中无DirectoryIndex指令指定的文件(例如:DirectoryIndex index.html index.php),则服务器会返回文件目录列表,例如:

#http://loclahost/jason
Index of /jason
Name            Last modified        Size    Description
test/            2019-02-26 20:30            -     
test1/            2019-07-24 17:47            -     
test2/            2016-05-24 21:05            -

查看目录test下的文件,即:

ls -al test/
total 20
drwxr-xr-x 2 root root  4096 Aug  5 14:54 .
drwxr-xr-x 7 root root  4096 Aug  5 16:17 ..
-rw-r--r-- 1 root root 11510 Feb 26 20:30 index.html

配置如下时,即为显示列表索引:

Options Indexes FollowSymLinks MultiViews

若禁止显示目录列表,两种方式:
1)带有符号”+-“或”-“,Options是多项时都必须加上符号,否则出错,例如:

Options -Indexes +FollowSymLinks +MultiViews

2)要么就去掉”Indexes”项:

Options FollowSymLinks MultiViews

决定在当前目录下是否允许文件系统使用符号连接(软连接)

以上述为例:

cd /var/www/jason
ln -s test/index.html index.html

如果配置了”Options FollowSymLinks”,此时”http://localhost/jason",此时不再显示目录而是访问index.html

SymLinksIfOwnerMatch

当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问

上述test目录中index.html的拥有者是root,如果修改软链接文件/var/www/jason/index.html所属用户,即:

$ cd /var/www/jason
chown -h www-data index.html

$ ls -al 
lrwxrwxrwx  1 www-data root    15 Aug  5 16:34 index.html -> test/index.html
drwxr-xr-x  3 root     root  4096 May 16 18:58 test
drwxr-xr-x  3 root     root  4096 Jan 18  2019 test1
drwxr-xr-x  6 root     root  4096 Jan 18  2019 test2

如果配置了”Options SymLinksIfOwnerMatch”,此时”http://localhost/jason",此时是不能访问index.html

ExecCGI

允许使用 mod_cgi模块执行CGI脚本。

Includes

允许使用 mod_include模块提供的服务器端包含功能。

IncludesNOEXEC

允许服务器端包含,但禁用”#exec cmd”和”#exec cgi”。但仍可以从 ScriptAlias目录使用”#include virtual”虚拟CGI脚本。

All

表示除 MultiViews之外的所有特性。自2.3.11版本之后已不再是默认选项

None

表示不启用任何的服务器特性。

轻轻的我走了,正如我轻轻的来