apache配(pèi)置<Files> <FilesMatch> <locations><locationsMatch>指(zhǐ)令
<Files> 指(zhǐ)令
說明 包含作(zuò)用於匹(pǐ)配指(zhǐ)定文(wén)件名的(de)指令(lìng)
語法 <Files filename> ... </Files>
作用域 server config, virtual host, directory, .htaccess
覆蓋(gài)項(xiàng) All
狀態 核心(xīn)(C)
模塊 core
<Files>指令提供了基於(yú)文件名的訪問控製,類(lèi)似於<Directory>和<locations>指令(lìng)。它將配對一個</Files>指令。在此配置段中定義的指(zhǐ)令(lìng)將作用於其基本名稱(不是完整的路(lù)徑)與指定的文件名相符的對象。<Files>段將根據(jù)它們在配(pèi)置文件中出現(xiàn)的順序被處理:在<Directory>段和(hé).htaccess文(wén)件(jiàn)被處理(lǐ)之後,但在<locations>段之前。請注意:<Files>能嵌入到<Directory>段中以限製它們作用的文件(jiàn)係統(tǒng)範(fàn)圍。
filename參數應當是一個文件名或是一個包含通配符的字符串,其中(zhōng)"?"匹配任何單個字符,"*"匹配(pèi)任何字(zì)符(fú)串(chuàn)序列。在"~"字符之後同樣(yàng)可(kě)以使用(yòng)正則表(biǎo)達(dá)式。比如:
<Files ~ "\.(gif|jpe?g|png)$">
將匹配(pèi)絕大部分常見的因特網圖象格(gé)式。然而在Apache1.3及其後繼版本中,更推薦使用<FilesMatch>指(zhǐ)令。
請注(zhù)意與<Directory>和<locations>配置段不同的是:<Files>配置段可用(yòng)於.htaccess文件當中。這將允(yǔn)許用戶在(zài)文件層麵上控(kòng)製對它們自己文(wén)件的(de)訪問。
<FilesMatch> 指令
說明 包含作用於與(yǔ)正則表達式匹配的文件名的指令
語法 <FilesMatch regex> ... </FilesMatch>
作用域 server config, virtual host, directory, .htaccess
覆蓋項 All
狀(zhuàng)態 核(hé)心(C)
模塊 core
<FilesMatch>指令(lìng)就像<Files>指令(lìng)一樣提(tí)供了針對文件名(míng)的訪問(wèn)控(kòng)製(zhì)。然而,它使(shǐ)用的是正則表(biǎo)達式。比如說:
<FilesMatch "\.(gif|jpe?g|png)$">
將匹配最(zuì)常見的internet圖形文(wén)件格式。
Include 指(zhǐ)令
說明 在服務器配置文件中包含其(qí)它配置(zhì)文(wén)件
語法 Include file-path|directory-path
作用域 server config, virtual host, directory
狀態 核(hé)心(C)
模塊 core
兼容性 通配符僅在Apache 2.0.41 及以後的版(bǎn)本中(zhōng)可用
這個指(zhǐ)令允許在服務器配置(zhì)文件中加入其它配置文件。
Shell風格(fnmatch())的(de)通配符可以用於按(àn)照字母順序一(yī)次包含多個文件。另外,如果Include指向了一個目(mù)錄而不是一個文件,Apache將(jiāng)讀入該目錄及其子目(mù)錄下的所(suǒ)有文(wén)件,並依照字(zì)母順序(xù)將這些文件作(zuò)為配置文件(jiàn)進行解(jiě)析。但是並(bìng)不推薦這麽做,因為偶(ǒu)爾會有(yǒu)臨時文(wén)件在這個目錄中生(shēng)成,從(cóng)而導致(zhì)httpd啟動(dòng)失(shī)敗。
文(wén)件(jiàn)的路徑可以是一個完整的絕對(duì)路徑(以一個斜杠開頭):
Include /usr/local/apache2/conf/ssl.conf
Include /usr/local/apache2/conf/vhosts/*.conf
或是相(xiàng)對於ServerRoot目錄的(de)相對路徑:
Include conf/ssl.conf
Include conf/vhosts/*.conf
請確保包含的(de)目(mù)錄中不(bú)包含任何諸如編輯器臨(lín)時文件等引(yǐn)起誤(wù)導的文件,因為Apache會嚐試讀取它(tā)們並把其中的內容作為配(pèi)置指令來處理,這樣可能會導致啟(qǐ)動過程的失敗。運行apachectl configtest 將會(huì)把配置檢查時(shí)所使用的所有文(wén)件列出來(lái)以供參考。這將有助(zhù)於檢驗配(pèi)置中是否僅包(bāo)含了您所希望出現那些文件。
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
<locations> 指令
說(shuō)明(míng) 將(jiāng)封裝的指令(lìng)作用(yòng)於匹配的URL
語法 <locations URL-path|URL> ... </locations>
作用域 server config, virtual host
狀(zhuàng)態(tài) 核(hé)心(C)
模塊(kuài) core
<locations>提供了基於(yú)URL的訪問控製。與<Directory>指令類似,它也會(huì)啟(qǐ)用一個(gè)以</locations>結尾的配(pèi)置(zhì)段。<locations>配置段的處(chù)理位於<Directory>, .htaccess, <Files>之(zhī)後,並依照(zhào)在配置文(wén)件中出現的(de)順(shùn)序進行處理。
<locations>配(pèi)置(zhì)段完全獨立於文件係統之外(wài)操作。這有幾個重要的後果。最重要的是<locations>不能用於(yú)針對文件(jiàn)係統的(de)訪問(wèn)控製。因(yīn)為可(kě)能會(huì)有幾(jǐ)個(gè)不同的URL指向文(wén)件係統中的同一(yī)個文件,所以(yǐ)這樣的控製常常會被(bèi)很容易的繞過。
何時(shí)使用<locations>?
使用(yòng)<locations>來將指令應用於獨立於文件係統之外的內(nèi)容(róng)。文(wén)件係統之(zhī)內(nèi)的內容請(qǐng)使用<Directory>和<Files>指令。不(bú)過(guò)一(yī)個(gè)例(lì)外是<locations /> ,它可以方便的作用於所用URL。
對(duì)所有的原(yuán)始(shǐ)(非代理(lǐ))請求來說,匹配的URL應該是具有"/path/"形式的URL路徑(jìng)。不包(bāo)括訪問方法、主(zhǔ)機名、端口或查詢字符串等。對於代理的請求,匹配的URL必須為"scheme://servername/path"的形式,而且必(bì)須包括前綴。
URL可以(yǐ)用一個通配符字符串來進行通配符的處理。"?"匹配任何單個的字符,而"*"匹配所有字符序列。
也可以附加"~"字符來表示使(shǐ)用正則表達式。例如:
<locations ~ "/(extra|special)/data">
將匹配所有包含(hán)字符串(chuàn)"/extra/data"或"/special/data"的(de)URL。在Apache1.3及其後續(xù)版本中,加(jiā)入了一個新的推薦使用的<locationsMatch>指令,其功能與<locations>的正則表達式(shì)版(bǎn)本相(xiàng)同。
<locations>的功能在與(yǔ)SetHandler指令(lìng)聯用時(shí)能(néng)發揮最大效(xiào)能。比如啟用狀態請求,但僅對(duì)來自foo.com的(de)用戶起效,您可以(yǐ)這樣使用:
<locations /status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from .foo.com
</locations>
請注意"/"(斜線(xiàn))
斜線字符根據它在URL中出現的位置不(bú)同有著特殊的(de)意義。大(dà)家可能都已經習慣在文件係統中(zhōng),多個連續的斜(xié)線(xiàn)會被作為(wéi)單一的斜線處理(例如"/home ///foo"與"/home/foo"相(xiàng)同)。但在URL裏麵,這(zhè)樣是(shì)行不通的(de)。<locationsMatch>指(zhǐ)令和正則表達式(shì)版本的<locations>要(yào)求您明確使(shǐ)用多重斜(xié)線。比如:<locationsMatch ^/abc>將匹配請求"/abc"但(dàn)不會(huì)匹(pǐ)配請(qǐng)求"//abc"。而(ér)非正則表達(dá)式版本的<locations>指令(lìng)在用(yòng)於代(dài)理請求時,也有類(lèi)似表現。但當非正則(zé)表達式版本的<locations>作用於非(fēi)代理(lǐ)請(qǐng)求時,它會將多個毗鄰的斜(xié)線認作單個斜線。比如(rú),如果您指定了<locations /abc/def>而請求是指向"/abc//def"的,那麽它們就是匹配的。
<locationsMatch> 指令
說明 將封裝的指令作用於正則表(biǎo)達式匹配(pèi)的URL
語法 <locationsMatch regex> ... </locationsMatch>
作用域 server config, virtual host
狀態 核心(C)
模塊 core
<locationsMatch>和<locations>指令相(xiàng)同,提供了基於URL的訪問控製。但它(tā)使用(yòng)正則表達式作為參數,而不是簡單字符串。比如:
<locationsMatch "/(extra|special)/data">
將匹配包含(hán)子(zǐ)串"/extra/data"或"/special/data"的URL。
關(guān)鍵(jiàn)詞:apache
閱讀本文後您有什(shí)麽感想? 已(yǐ)有 人給出(chū)評價!
- 35
- 705
- 48
- 101
- 114
- 50