前言:Options指令是Apache配置文件中一個(gè)比較常見也比較重要的指令,Options指令可以在Apache服務(wù)器核心配置(server config)、虛擬主機(jī)配置(virtual host)、特定目錄配置(directory)以及.htaccess文件中使用。Options指令的主要作用?控制特定目錄將啟用哪些服務(wù)器特性。
Options指令常見的配置示例代碼如下:
<Directory "/home/www">
#指定根目錄/home/www啟用Indexes、FollowSymLinks兩種特性
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
Options服務(wù)器特性
Options指令的完整語法為:Options [+|-]option [[+|-]option];簡而言之,Options指令后可以附加指定多種服務(wù)器特性,特性選項(xiàng)之間以空格分隔。下面我們來看看Options指令后可以附加的特性選項(xiàng)的具體作用及含義(Apache配置中的內(nèi)容均不區(qū)分大小寫):
1、All
表示除MultiViews之外的所有特性(這也是Options指令的默認(rèn)設(shè)置)
2、None
表示不啟用任何的服務(wù)器特性
3、FollowSymLinks
服務(wù)器允許在此目錄中使用符號(hào)連接(如果該配置選項(xiàng)位于配置段中,將會(huì)被忽略),意思是:允許網(wǎng)站目錄里的鏈接文件鏈接到首頁目錄以外的文件。舉例來說,如果你把首頁目錄設(shè)置為/var/www/html,那么你的網(wǎng)頁程序最多只能訪問到/var/www/html目錄,上層目錄是不可見的。但是可以通過鏈接把文件鏈接到/var/www/html目錄以外的文件以訪問該文件,如果FollowSymLinks被設(shè)置的話。
4、Indexes
如果輸入的網(wǎng)址對應(yīng)服務(wù)器上的一個(gè)文件目錄,而此目錄中又沒有DirectoryIndex指令(例:DirectoryIndex index.html index.PHP),那么服務(wù)器會(huì)返回由mod_autoindex模塊生成的一個(gè)格式化后的目錄列表,并列出該目錄下的所有文件(如下圖)
4、MultiViews
允許使用mod_negotiation模塊提供內(nèi)容協(xié)商的”多重視圖”。簡而言之,如果客戶端請求的路徑可能對應(yīng)多種類型的文件,那么服務(wù)器將根據(jù)客戶端請求的具體情況自動(dòng)選擇一個(gè)最匹配客戶端要求的文件。例如,在服務(wù)器站點(diǎn)的file文件夾下中在名為hello.jpg和hello.html的兩個(gè)文件,此時(shí)用戶輸入Http://localhost/file/hello,如果在file文件夾下并沒有hello子目錄,那么服務(wù)器將會(huì)嘗試在file文件夾下查找形如hello.*的文件,然后根據(jù)用戶請求的具體情況返回最匹配要求的hello.jpg或者hello.html
5、SymLinksIfOwnerMatch
服務(wù)器僅在符號(hào)連接與目標(biāo)文件或目錄的所有者具有相同的用戶ID時(shí)才使用它。簡而言之,只有當(dāng)符號(hào)連接和符號(hào)連接指向的目標(biāo)文件或目錄的所有者是同一用戶時(shí),才會(huì)使用符號(hào)連接(如果該配置選項(xiàng)位于配置段?,將會(huì)被忽略)
6、ExecCGI
允許使用mod_cgi模塊執(zhí)行CGI腳本
7、Includes
允許?用mod_include模塊提供的服務(wù)器端包含功能,例如讓apache支持ssi。
8、IncludesNOEXEC
允許服務(wù)器端包含,但禁用”#exec cmd”和”#exec cgi”。但仍可以從ScriptAlias目錄使用”#include virtual”虛擬CGI腳本
注意
此外,比較細(xì)心的讀者應(yīng)該注意到,Options指令語法允許在配置選項(xiàng)前加上符號(hào)”+”或者”-“,那么這到底是什么意思呢?
實(shí)際上,Apache允許在一個(gè)目錄配置中設(shè)置多個(gè)Options指令。不過,一般來說,如果一個(gè)目錄被多次設(shè)置了Options,則指定特性數(shù)量最多的一個(gè)Options指令會(huì)被完全接受(其它的被忽略),而各個(gè)Options指令之間并不會(huì)合并。但是如果我們在可選配置項(xiàng)前加上了符號(hào)”+”或”-“,那么表示該可選項(xiàng)將會(huì)被合并。所有前面加有”+”號(hào)的可選項(xiàng)將強(qiáng)制覆蓋當(dāng)前的可選項(xiàng)設(shè)置,而所有前面有”-“號(hào)的可選項(xiàng)將強(qiáng)制從當(dāng)前可選項(xiàng)設(shè)置中去除。你可以參考下面的例子:
#示例1
<Directory /web/file>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/file/image>
Options Includes
</Directory>
#目錄/web/file/image只會(huì)被設(shè)置Includes特性
#示例2
<Directory /web/file>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/file/image>
Options +Includes -Indexes
</Directory>
#目錄/web/file/image將會(huì)被設(shè)置Includes、FollowSymLinks兩種特性
備注1:混合使用前面帶”+”、”-“和前面不帶”+”、”-“的同一可選項(xiàng),可能會(huì)導(dǎo)致出現(xiàn)意料之外的結(jié)果 ;
備注2:使用-IncludesNOEXEC或-Includes時(shí),不論前面如何設(shè)置,都會(huì)完全禁用服務(wù)器端包含。