.htaccess文件(或者"分佈式配置文件")提供了針對目錄改變配置的方法, 即,在一個特定的文檔目錄中放置一個包含一個或多個指令的文件, 以做用於此目錄及其全部子目錄。做爲用戶,所能使用的命令受到限制。管理員能夠經過Apache的AllowOverride指令來設置。html
1簡介
概述來講,htaccess文件是
Apache服務器中的一個配置文件,它負責相關目錄下的網頁配置。經過htaccess文件,能夠幫咱們實現:網頁
301重定向、自定義404錯誤頁面、改變文件擴展名、容許/阻止特定的用戶或者目錄的訪問、禁止目錄列表、配置默認文檔等功能。
Unix、Linux系統或者是任何版本的Apache Web服務器都是支持.htaccess的,可是有的
主機服務商可能不容許你自定義本身的.htaccess文件。
啓用.htaccess,須要修改httpd.conf,啓用AllowOverride,並能夠用 AllowOverride限制特定命令的使用。若是須要使用.htaccess之外的其餘文件名,能夠用AccessFileName指令來改變。例 如,須要使用.config ,則能夠在服務器配置文件中按如下方法配置:AccessFileName .config 。
籠統地說,.htaccess能夠幫咱們實現包括:文件夾密碼保護、用戶自動
重定向、自定義錯誤頁面、改變你的
文件擴展名、封禁特定IP地址的用戶、只容許特定IP地址的用戶、禁止目錄列表,以及使用其餘文件做爲index文件等一些功能。
2工做
.htaccess文件(或者"分佈式配置文件")提供了針對每一個目錄改變配置的方法,即在一個特定的目錄中放置一個包含指令的文件,其中的指令做用於此目錄及其全部子目錄。
說明
若是須要使用.htaccess之外的其餘文件名,能夠用AccessFileName指令來改變。例如,須要使用.config ,則能夠在服務器配置文件中按如下方法配置:
AccessFileName .config
一般,.htaccess文件使用的配置語法和主配置文件同樣。AllowOverride指令按類別決定 了.htaccess文件中哪些指令纔是有效的。若是一個指令容許在.htaccess中使用,那麼在本手冊的說明中,此指令會有一個覆蓋項段,其中說明 了爲使此指令生效而必須在AllowOverride指令中設置的值。
例如,本手冊對AddDefaultCharset指令的闡述代表此指令能夠用於.htaccess文件中(見"做 用域"項),而覆蓋項一行是FileInfo ,那麼爲了使.htaccess中的此指令有效,則至少要設置 AllowOverride FileInfo 。
例子
做用域
|
server config, virtual host, directory, .htaccess
|
覆蓋項
|
FileInfo
|
若是不能肯定某個指令是否能夠用於.htaccess文件,能夠查閱手冊中對指令的說明,看在"做用域"行中是否有".htaccess" 。
(不)使用
通常狀況下,不該該使用.htaccess文件,除非你對主配置文件沒有訪問權限。有一種很常見的誤解,認爲
用戶認證只能經過.htaccess文件實現,其實並非這樣,把用戶認證寫在主配置文件中是徹底可行的,並且是一種很好的方法。
.htaccess文件應該被用在內容提供者須要針對特定目錄改變服務器的配置而又沒有
root權限的狀況下。若是服務器
管理員不肯意頻繁修改配置,則能夠容許用戶經過.htaccess文件本身修改配置,尤爲是ISP在同一個機器上運行了多個用戶站點,而又但願用戶能夠本身改變配置的狀況下。
雖然如此,通常都應該儘量地避免使用.htaccess文件。任何但願放在.htaccess文件中的配置,均可以放在主配置文件的<Directory>段中,並且更高效。
避免使用.htaccess文件有兩個主要緣由。
首先是性能。若是AllowOverride啓用了.htaccess文件,則Apache須要在每一個目錄中查找.htaccess文件,所以,不管是否真正用到,啓用.htaccess都會致使性能的降低。另外,對每個請求,都須要讀取一次.htaccess文件。
還有,Apache必須在全部上級的目錄中查找.htaccess文件,以使全部有效的指令都起做用(參見指令的生效),因此,若是請求/www/htdocs/example中的頁面,Apache必須查找如下文件:
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
總共要訪問4個額外的文件,即便這些文件都不存在。(注意,這可能僅僅因爲容許根目錄"/"使用.htaccess ,雖然這種狀況並很少。)
其次是安全。這樣會容許用戶本身修改服務器的配置,這可能會致使某些意想不到的修改,因此請認真考慮是否應當給予用 戶這樣的特權。可是,若是給予用戶較少的特權而不能知足其須要,則會帶來額外的技術支持請求,因此,必須明確地告訴用戶已經給予他們的權限,說明 AllowOverride設置的值,並引導他們參閱相應的說明,以避免往後生出許多麻煩。
注意,在/www/htdocs/example目錄下的.htaccess文件中放置指令,與在主配置文件中<Directory /www/htdocs/example>段中放置相同指令,是徹底等效的。
/www/htdocs/example目錄下的.htaccess文件的內容:
AddType text/example .exm
-
conf文件中摘錄的內容:
<Directory /www/htdocs/example>
AddType text/example .exm
</Directory>
可是,把配置放在主配置文件中更加高效,由於只須要在Apache啓動時讀取一次,而不是在每次文件被請求時都讀取。
將AllowOverride設置爲none能夠徹底禁止使用.htaccess文件:
AllowOverride None
指令範圍
.htaccess 文件中的配置指令做用於.htaccess文件所在的目錄及其全部子目錄,可是很重要的、須要注意的是,其上級目錄也可能會有.htaccess文件,而 指令是按查找順序依次生效的,因此一個特定目錄下的.htaccess文件中的指令可能會覆蓋其上級目錄中的.htaccess文件中的指令,即子目錄中 的指令會覆蓋父目錄或者主配置文件中的指令。
例子:
/www/htdocs/example1目錄中的.htaccess文件有以下內容:
Options +ExecCGI
(注意:必須設置"AllowOverride Options"以容許在.htaccess中使用"Options"指令)
/www/htdocs/example1/example2目錄中的.htaccess文件有以下內容:
Options Includes
因爲第二個.htaccess文件的存在,/www/htdocs/example1/example2中的CGI執行是不容許的,而只容許 Options Includes ,它徹底覆蓋了以前的設置。
將.htaccess合併到主配置文件中
正如在配置段(容器)中討論的那樣,.htaccess文件可以覆蓋<Directory>段中對相應 目錄的設置,可是也一樣會被主配置文件中其它類型的配置段所覆蓋。這個特性能夠用來強制實施某些配置,甚至在AllowOverride已經許可的狀況 下。舉個例子來講,爲了強迫在.htaccess中禁止
腳本執行但不限制其它的狀況下,能夠這樣:
<Directory />
Allowoverride All
</Directory>
<Location />
Options +IncludesNoExec -ExecCGI
</Location>
認證舉例
如 果你只是爲了知道如何認證,而直接從這裏開始看的,有很重要的一點須要注意,有一種常見的誤解,認爲實現密碼認證必需要使用.htaccess文件,其實 是不正確的。把認證指令放在主配置文件的<Directory>段中是一個更好的方法,而.htaccess文件應該僅僅用於無權訪問主配置 文件的時候。參見上述關於什麼時候應該與什麼時候不該該使用.htaccess文件的討論。
有此聲明在先,若是你仍然須要使用.htaccess文件,請繼續看如下說明。
.htaccess文件的內容:
AuthType Basic
AuthName "Password Required"
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file
Require Group admins
必須設置 AllowOverride AuthConfig 以容許這些指令生效。
服務器端舉例
.htaccess文件的另外一個常見用途是容許一個特定的目錄使用服務器端包含(SSI),能夠在須要的目錄中放置.htaccess文件,並做以下配置:
Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml
注意,必須同時設置 AllowOverride Options 和 AllowOverride FileInfo 以使這些指令生效。
CGI舉例
能夠經過.htaccess文件容許在特定的目錄中執行CGI程序,須要做以下配置:
Options +ExecCGI
AddHandler cgi-script cgi pl
另外,以下配置可使給定目錄下的全部文件被視爲CGI程序:
Options +ExecCGI
SetHandler cgi-script
注意,必須同時設置 AllowOverride Options 和 AllowOverride FileInfo 以使這些指令生效。
.htaccess工具
不會寫的朋友,在這介紹一款很不錯.htaccess的重定向—URL重寫工具rewriting-tool
3疑難解答
若是在.htaccess文件中的某些指令不起做用,可能有多種緣由。
最多見的緣由是AllowOverride指令沒有被正確設置,必須確保沒有對此文件區域設置 AllowOverride None 。有一個很好的測試方法,就是在.htaccess文件隨便增長點無心義的垃圾內容,若是服務器沒有返回了一個錯誤消息,那麼幾乎能夠判定設置了 AllowOverride None 。
在訪問文檔時,若是收到服務器的出錯消息,應該檢查Apache的
錯誤日誌,能夠知道.htaccess文件中哪些指令是不容許使用的,也可能會發現須要糾正的語法錯誤。