<Files> 指令
說明 包含作用于匹配指定文件名的指令 語法 <Files filename> ... </Files> 作用域 server config, virtual host, directory, .htaccess 覆蓋項(xiàng) All 狀態(tài) 核心(C) 模塊 core
<Files>指令提供了基于文件名的訪問控制,類似于<Directory>和<Location>指令。它將配對(duì)一個(gè)</Files>指令。在此配置段中定義的指令將作用于其基本名稱(不是完整的路徑)與指定的文件名相符的對(duì)象。<Files>段將根據(jù)它們?cè)谂渲梦募谐霈F(xiàn)的順序被處理:在<Directory>段和.htaccess文件被處理之后,但在<Location>段之前。請(qǐng)注意:<Files>能嵌入到<Directory>段中以限制它們作用的文件系統(tǒng)范圍。
filename參數(shù)應(yīng)當(dāng)是一個(gè)文件名或是一個(gè)包含通配符的字符串,其中"?"匹配任何單個(gè)字符,"*"匹配任何字符串序列。在"~"字符之后同樣可以使用正則表達(dá)式。比如:
<Files ~ "\.(gif|jpe?g|png)$">
將匹配絕大部分常見的因特網(wǎng)圖象格式。然而在Apache1.3及其后繼版本中,更推薦使用<FilesMatch>指令。
請(qǐng)注意與<Directory>和<Location>配置段不同的是:<Files>配置段可用于.htaccess文件當(dāng)中。這將允許用戶在文件層面上控制對(duì)它們自己文件的訪問。
<FilesMatch> 指令
說明 包含作用于與正則表達(dá)式匹配的文件名的指令 語法 <FilesMatch regex> ... </FilesMatch> 作用域 server config, virtual host, directory, .htaccess 覆蓋項(xiàng) All 狀態(tài) 核心(C) 模塊 core
<FilesMatch>指令就像<Files>指令一樣提供了針對(duì)文件名的訪問控制。然而,它使用的是正則表達(dá)式。比如說:
<FilesMatch "\.(gif|jpe?g|png)$">
將匹配最常見的internet圖形文件格式。
Include 指令
說明 在服務(wù)器配置文件中包含其它配置文件 語法 Include file-path|directory-path 作用域 server config, virtual host, directory 狀態(tài) 核心(C) 模塊 core 兼容性 通配符僅在Apache 2.0.41 及以后的版本中可用
這個(gè)指令允許在服務(wù)器配置文件中加入其它配置文件。
Shell風(fēng)格(fnmatch())的通配符可以用于按照字母順序一次包含多個(gè)文件。另外,如果Include指向了一個(gè)目錄而不是一個(gè)文件,Apache將讀入該目錄及其子目錄下的所有文件,并依照字母順序?qū)⑦@些文件作為配置文件進(jìn)行解析。但是并不推薦這么做,因?yàn)榕紶枙?huì)有臨時(shí)文件在這個(gè)目錄中生成,從而導(dǎo)致httpd啟動(dòng)失敗。
文件的路徑可以是一個(gè)完整的絕對(duì)路徑(以一個(gè)斜杠開頭):
Include /usr/local/apache2/conf/ssl.conf Include /usr/local/apache2/conf/vhosts/*.conf
或是相對(duì)于ServerRoot目錄的相對(duì)路徑:
Include conf/ssl.conf Include conf/vhosts/*.conf
請(qǐng)確保包含的目錄中不包含任何諸如編輯器臨時(shí)文件等引起誤導(dǎo)的文件,因?yàn)锳pache會(huì)嘗試讀取它們并把其中的內(nèi)容作為配置指令來處理,這樣可能會(huì)導(dǎo)致啟動(dòng)過程的失敗。運(yùn)行apachectl configtest 將會(huì)把配置檢查時(shí)所使用的所有文件列出來以供參考。這將有助于檢驗(yàn)配置中是否僅包含了您所希望出現(xiàn)那些文件。
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 狀態(tài) 核心(C) 模塊 core
<Location>提供了基于URL的訪問控制。與<Directory>指令類似,它也會(huì)啟用一個(gè)以</Location>結(jié)尾的配置段。<Location>配置段的處理位于<Directory>, .htaccess, <Files>之后,并依照在配置文件中出現(xiàn)的順序進(jìn)行處理。
<Location>配置段完全獨(dú)立于文件系統(tǒng)之外操作。這有幾個(gè)重要的后果。最重要的是<Location>不能用于針對(duì)文件系統(tǒng)的訪問控制。因?yàn)榭赡軙?huì)有幾個(gè)不同的URL指向文件系統(tǒng)中的同一個(gè)文件,所以這樣的控制常常會(huì)被很容易的繞過。 何時(shí)使用<Location>?
使用<Location>來將指令應(yīng)用于獨(dú)立于文件系統(tǒng)之外的內(nèi)容。文件系統(tǒng)之內(nèi)的內(nèi)容請(qǐng)使用<Directory>和<Files>指令。不過一個(gè)例外是<Location /> ,它可以方便的作用于所用URL。
對(duì)所有的原始(非代理)請(qǐng)求來說,匹配的URL應(yīng)該是具有"/path/"形式的URL路徑。不包括訪問方法、主機(jī)名、端口或查詢字符串等。對(duì)于代理的請(qǐng)求,匹配的URL必須為"scheme://servername/path"的形式,而且必須包括前綴。
URL可以用一個(gè)通配符字符串來進(jìn)行通配符的處理。"?"匹配任何單個(gè)的字符,而"*"匹配所有字符序列。
也可以附加"~"字符來表示使用正則表達(dá)式。例如:
<Location ~ "/(extra|special)/data">
將匹配所有包含字符串"/extra/data"或"/special/data"的URL。在Apache1.3及其后續(xù)版本中,加入了一個(gè)新的推薦使用的<LocationMatch>指令,其功能與<Location>的正則表達(dá)式版本相同。
<Location>的功能在與SetHandler指令聯(lián)用時(shí)能發(fā)揮最大效能。比如啟用狀態(tài)請(qǐng)求,但僅對(duì)來自foo.com的用戶起效,您可以這樣使用:
<Location /status> SetHandler server-status Order Deny,Allow Deny from all Allow from .foo.com </Location> 請(qǐng)注意"/"(斜線)
斜線字符根據(jù)它在URL中出現(xiàn)的位置不同有著特殊的意義。大家可能都已經(jīng)習(xí)慣在文件系統(tǒng)中,多個(gè)連續(xù)的斜線會(huì)被作為單一的斜線處理(例如"/home ///foo"與"/home/foo"相同)。但在URL里面,這樣是行不通的。<LocationMatch>指令和正則表達(dá)式版本的<Location>要求您明確使用多重斜線。比如:<LocationMatch ^/abc>將匹配請(qǐng)求"/abc"但不會(huì)匹配請(qǐng)求"http://abc"。而非正則表達(dá)式版本的<Location>指令在用于代理請(qǐng)求時(shí),也有類似表現(xiàn)。但當(dāng)非正則表達(dá)式版本的<Location>作用于非代理請(qǐng)求時(shí),它會(huì)將多個(gè)毗鄰的斜線認(rèn)作單個(gè)斜線。比如,如果您指定了<Location /abc/def>而請(qǐng)求是指向"/abc//def"的,那么它們就是匹配的。
<LocationMatch> 指令
說明 將封裝的指令作用于正則表達(dá)式匹配的URL 語法 <LocationMatch regex> ... </LocationMatch> 作用域 server config, virtual host 狀態(tài) 核心(C) 模塊 core
<LocationMatch>和<Location>指令相同,提供了基于URL的訪問控制。但它使用正則表達(dá)式作為參數(shù),而不是簡(jiǎn)單字符串。比如:
<LocationMatch "/(extra|special)/data">
將匹配包含子串"/extra/data"或"/special/data"的URL。
如果您喜歡本文請(qǐng)分享給您的好友,謝謝!如想瀏覽更多更好的web服務(wù)器內(nèi)容,請(qǐng)登錄:http://www./edu/server/1/index.html
|