<Files> 指令
說明 包含作用於匹配指定文件名的指令
語法 <Files filename> ... </Files>
作用域 server config, virtual host, directory, .htaccess
覆蓋項 All
狀態 核心(C)
模塊 core
<Files>指令提供了基於文件名的訪問控制,類似於<Directory>和<Location>指令。它將配對一個</Files>指令。在此配置段中定義的指令將作用於其基本名稱(不是完整的路徑)與指定的文件名相符的對象。<Files>段將根據它們在配置文件中出現的順序被處理:在<Directory>段和.htaccess文件被處理之後,但在<Location>段之前。請注意:<Files>能嵌入到<Directory>段中以限制它們作用的文件系統範圍。
filename參數應當是一個文件名或是一個包含通配符的字符串,其中"?"匹配任何單個字符,"*"匹配任何字符串序列。在"~"字符之後同樣可以使用正則表達式。比如:
<Files ~ "\.(gif|jpe?g|png)$">
將匹配絕大部分常見的因特網圖象格式。然而在Apache1.3及其後繼版本中,更推薦使用<FilesMatch>指令。
請注意與<Directory>和<Location>配置段不同的是:<Files>配置段可用於.htaccess文件當中。這將允許用戶在文件層面上控制對它們自己文件的訪問。
<FilesMatch> 指令
說明 包含作用於與正則表達式匹配的文件名的指令
語法 <FilesMatch regex> ... </FilesMatch>
作用域 server config, virtual host, directory, .htaccess
覆蓋項 All
狀態 核心(C)
模塊 core
<FilesMatch>指令就像<Files>指令一樣提供了針對文件名的訪問控制。然而,它使用的是正則表達式。比如說:
<FilesMatch "\.(gif|jpe?g|png)$">
將匹配最常見的internet圖形文件格式。
Include 指令
說明 在服務器配置文件中包含其它配置文件
語法 Include file-path|directory-path
作用域 server config, virtual host, directory
狀態 核心(C)
模塊 core
兼容性 通配符僅在Apache 2.0.41 及以後的版本中可用
這個指令允許在服務器配置文件中加入其它配置文件。
Shell風格(fnmatch())的通配符可以用於按照字母順序一次包含多個文件。另外,如果Include指向了一個目錄而不是一個文件,Apache將讀入該目錄及其子目錄下的所有文件,並依照字母順序將這些文件作爲配置文件進行解析。但是並不推薦這麼做,因爲偶爾會有臨時文件在這個目錄中生成,從而導致httpd啓動失敗。
文件的路徑可以是一個完整的絕對路徑(以一個斜槓開頭):
Include /usr/local/apache2/conf/ssl.conf
Include /usr/local/apache2/conf/vhosts/*.conf
或是相對於ServerRoot目錄的相對路徑:
Include conf/ssl.conf
Include conf/vhosts/*.conf
請確保包含的目錄中不包含任何諸如編輯器臨時文件等引起誤導的文件,因爲Apache會嘗試讀取它們並把其中的內容作爲配置指令來處理,這樣可能會導致啓動過程的失敗。運行apachectl configtest 將會把配置檢查時所使用的所有文件列出來以供參考。這將有助於檢驗配置中是否僅包含了您所希望出現那些文件。
root@host# apachectl configtest
Processing config file: /usr/local/apache2/conf/ssl.conf
Processing config file: /usr/local/apache2/conf/vhosts/vhost1.conf
Processing config file: /usr/local/apache2/conf/vhosts/vhost2.conf
Syntax OK
<Location> 指令
說明 將封裝的指令作用於匹配的URL
語法 <Location URL-path|URL> ... </Location>
作用域 server config, virtual host
狀態 核心(C)
模塊 core
<Location>提供了基於URL的訪問控制。與<Directory>指令類似,它也會啓用一個以</Location>結尾的配置段。<Location>配置段的處理位於<Directory>, .htaccess, <Files>之後,並依照在配置文件中出現的順序進行處理。
<Location>配置段完全獨立於文件系統之外操作。這有幾個重要的後果。最重要的是<Location>不能用於針對文件系統的訪問控制。因爲可能會有幾個不同的URL指向文件系統中的同一個文件,所以這樣的控制常常會被很容易的繞過。
何時使用<Location>?
使用<Location>來將指令應用於獨立於文件系統之外的內容。文件系統之內的內容請使用<Directory>和<Files>指令。不過一個例外是<Location /> ,它可以方便的作用於所用URL。
對所有的原始(非代理)請求來說,匹配的URL應該是具有"/path/"形式的URL路徑。不包括訪問方法、主機名、端口或查詢字符串等。對於代理的請求,匹配的URL必須爲"scheme://servername/path"的形式,而且必須包括前綴。
URL可以用一個通配符字符串來進行通配符的處理。"?"匹配任何單個的字符,而"*"匹配所有字符序列。
也可以附加"~"字符來表示使用正則表達式。例如:
<Location ~ "/(extra|special)/data">
將匹配所有包含字符串"/extra/data"或"/special/data"的URL。在Apache1.3及其後續版本中,加入了一個新的推薦使用的<LocationMatch>指令,其功能與<Location>的正則表達式版本相同。
<Location>的功能在與SetHandler指令聯用時能發揮最大效能。比如啓用狀態請求,但僅對來自foo.com的用戶起效,您可以這樣使用:
<Location /status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from .foo.com
</Location>
請注意"/"(斜線)
斜線字符根據它在URL中出現的位置不同有着特殊的意義。大家可能都已經習慣在文件系統中,多個連續的斜線會被作爲單一的斜線處理(例如"/home ///foo"與"/home/foo"相同)。但在URL裏面,這樣是行不通的。<LocationMatch>指令和正則表達式版本的<Location>要求您明確使用多重斜線。比如:<LocationMatch ^/abc>將匹配請求"/abc"但不會匹配請求"//abc"。而非正則表達式版本的<Location>指令在用於代理請求時,也有類似表現。但當非正則表達式版本的<Location>作用於非代理請求時,它會將多個毗鄰的斜線認作單個斜線。比如,如果您指定了<Location /abc/def>而請求是指向"/abc//def"的,那麼它們就是匹配的。
<LocationMatch> 指令
說明 將封裝的指令作用於正則表達式匹配的URL
語法 <LocationMatch regex> ... </LocationMatch>
作用域 server config, virtual host
狀態 核心(C)
模塊 core
<LocationMatch>和<Location>指令相同,提供了基於URL的訪問控制。但它使用正則表達式作爲參數,而不是簡單字符串。比如:
<LocationMatch "/(extra|special)/data">
將匹配包含子串"/extra/data"或"/special/data"的URL。