apache配置<Files> <FilesMatch> <Location><LocationMatch>指令
<Files> 指令
說(shuō)明 包含作用于匹配指定文件名的指令
語(yǔ)法 <Files filename> ... </Files>
作用域 server config, virtual host, directory, .htaccess
覆蓋項(xiàng) All
狀態(tài) 核心(C)
模塊 core
<Files>指令提供了基于文件名的訪(fǎng)問(wèn)控制,類(lèi)似于<Directory>和<Location>指令。它將配對(duì)一個(gè)</Files>指令。在此配置段中定義的指令將作用于其基本名稱(chēng)(不是完整的路徑)與指定的文件名相符的對(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)$">
將匹配絕大部分常見(jiàn)的因特網(wǎng)圖象格式。然而在Apache1.3及其后繼版本中,更推薦使用<FilesMatch>指令。
請(qǐng)注意與<Directory>和<Location>配置段不同的是:<Files>配置段可用于.htaccess文件當(dāng)中。這將允許用戶(hù)在文件層面上控制對(duì)它們自己文件的訪(fǎng)問(wèn)。
<FilesMatch> 指令
說(shuō)明 包含作用于與正則表達(dá)式匹配的文件名的指令
語(yǔ)法 <FilesMatch regex> ... </FilesMatch>
作用域 server config, virtual host, directory, .htaccess
覆蓋項(xiàng) All
狀態(tài) 核心(C)
模塊 core
<FilesMatch>指令就像<Files>指令一樣提供了針對(duì)文件名的訪(fǎng)問(wèn)控制。然而,它使用的是正則表達(dá)式。比如說(shuō):
<FilesMatch "\.(gif|jpe?g|png)$">
將匹配最常見(jiàn)的internet圖形文件格式。
Include 指令
說(shuō)明 在服務(wù)器配置文件中包含其它配置文件
語(yǔ)法 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è)斜杠開(kāi)頭):
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)容作為配置指令來(lái)處理,這樣可能會(huì)導(dǎo)致啟動(dòng)過(guò)程的失敗。運(yùn)行apachectl configtest 將會(huì)把配置檢查時(shí)所使用的所有文件列出來(lái)以供參考。這將有助于檢驗(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> 指令
說(shuō)明 將封裝的指令作用于匹配的URL
語(yǔ)法 <Location URL-path|URL> ... </Location>
作用域 server config, virtual host
狀態(tài) 核心(C)
模塊 core
<Location>提供了基于URL的訪(fǎng)問(wèn)控制。與<Directory>指令類(lèi)似,它也會(huì)啟用一個(gè)以</Location>結(jié)尾的配置段。<Location>配置段的處理位于<Directory>, .htaccess, <Files>之后,并依照在配置文件中出現(xiàn)的順序進(jìn)行處理。
<Location>配置段完全獨(dú)立于文件系統(tǒng)之外操作。這有幾個(gè)重要的后果。最重要的是<Location>不能用于針對(duì)文件系統(tǒng)的訪(fǎng)問(wèn)控制。因?yàn)榭赡軙?huì)有幾個(gè)不同的URL指向文件系統(tǒng)中的同一個(gè)文件,所以這樣的控制常常會(huì)被很容易的繞過(guò)。
何時(shí)使用<Location>?
使用<Location>來(lái)將指令應(yīng)用于獨(dú)立于文件系統(tǒng)之外的內(nèi)容。文件系統(tǒng)之內(nèi)的內(nèi)容請(qǐng)使用<Directory>和<Files>指令。不過(guò)一個(gè)例外是<Location /> ,它可以方便的作用于所用URL。
對(duì)所有的原始(非代理)請(qǐng)求來(lái)說(shuō),匹配的URL應(yīng)該是具有"/path/"形式的URL路徑。不包括訪(fǎng)問(wèn)方法、主機(jī)名、端口或查詢(xún)字符串等。對(duì)于代理的請(qǐng)求,匹配的URL必須為"scheme://servername/path"的形式,而且必須包括前綴。
URL可以用一個(gè)通配符字符串來(lái)進(jìn)行通配符的處理。"?"匹配任何單個(gè)的字符,而"*"匹配所有字符序列。
也可以附加"~"字符來(lái)表示使用正則表達(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ì)來(lái)自foo.com的用戶(hù)起效,您可以這樣使用:
<Location /status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from .foo.com
</Location>
請(qǐng)注意"/"(斜線(xiàn))
斜線(xiàn)字符根據(jù)它在URL中出現(xiàn)的位置不同有著特殊的意義。大家可能都已經(jīng)習(xí)慣在文件系統(tǒng)中,多個(gè)連續(xù)的斜線(xiàn)會(huì)被作為單一的斜線(xiàn)處理(例如"/home ///foo"與"/home/foo"相同)。但在URL里面,這樣是行不通的。<LocationMatch>指令和正則表達(dá)式版本的<Location>要求您明確使用多重斜線(xiàn)。比如:<LocationMatch ^/abc>將匹配請(qǐng)求"/abc"但不會(huì)匹配請(qǐng)求"//abc"。而非正則表達(dá)式版本的<Location>指令在用于代理請(qǐng)求時(shí),也有類(lèi)似表現(xiàn)。但當(dāng)非正則表達(dá)式版本的<Location>作用于非代理請(qǐng)求時(shí),它會(huì)將多個(gè)毗鄰的斜線(xiàn)認(rèn)作單個(gè)斜線(xiàn)。比如,如果您指定了<Location /abc/def>而請(qǐng)求是指向"/abc//def"的,那么它們就是匹配的。
<LocationMatch> 指令
說(shuō)明 將封裝的指令作用于正則表達(dá)式匹配的URL
語(yǔ)法 <LocationMatch regex> ... </LocationMatch>
作用域 server config, virtual host
狀態(tài) 核心(C)
模塊 core
<LocationMatch>和<Location>指令相同,提供了基于URL的訪(fǎng)問(wèn)控制。但它使用正則表達(dá)式作為參數(shù),而不是簡(jiǎn)單字符串。比如:
<LocationMatch "/(extra|special)/data">
將匹配包含子串"/extra/data"或"/special/data"的URL。
關(guān)鍵詞:apache
閱讀本文后您有什么感想? 已有 人給出評(píng)價(jià)!
- 35
- 705
- 48
- 101
- 114
- 50