綠色資源網(wǎng):您身邊最放心的安全下載站! 最新軟件|熱門排行|軟件分類|軟件專題|廠商大全

綠色資源網(wǎng)

技術(shù)教程
您的位置:首頁服務(wù)器類Web服務(wù)器 → apache配置<Files> <FilesMatch> <Location><LocationMatch>指令

apache配置<Files> <FilesMatch> <Location><LocationMatch>指令

我要評(píng)論 2012/02/01 13:26:19 來源:綠色資源網(wǎng) 編輯:downcc.com [ ] 評(píng)論:0 點(diǎn)擊:5332次

<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)求"//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。

關(guān)鍵詞:apache

閱讀本文后您有什么感想? 已有 人給出評(píng)價(jià)!

  • 35 歡迎喜歡
  • 705 白癡
  • 48 拜托
  • 101 哇
  • 114 加油
  • 50 鄙視