一、什么是.htaccess文件
.htaccess文件是Apache服務(wù)器上的一個(gè)設(shè)置文件。它是一個(gè)文本文件,可以使用任何文本編輯器進(jìn)行編寫。.htaccess文件提供了針對(duì)目錄改變配置的方法,即通過(guò)在一個(gè)特定的文檔目錄中放置一個(gè)包含一個(gè)或多個(gè)指令的文件(.htaccess文件),以作用于此目錄及其所有子目錄。.htaccess的功能包括設(shè)置網(wǎng)頁(yè)密碼、設(shè)置發(fā)生錯(cuò)誤時(shí)出現(xiàn)的文件、改變首頁(yè)的文件名(如index.html)、禁止讀取文件名、重新導(dǎo)向文件、加上MIME類別、禁止列目錄下的文件等。
在需要針對(duì)目錄改變服務(wù)器的配置,而對(duì)服務(wù)器系統(tǒng)沒(méi)有root權(quán)限時(shí),應(yīng)該使用.htaccess文件。如果服務(wù)器管理員不愿意頻繁修改配置,則可以允許用戶通過(guò).htaccess文件自己修改配置,尤其是ISP在一臺(tái)機(jī)器上提供多個(gè)用戶站點(diǎn),而又希望用戶可以自己改變配置的情況下,一般會(huì)開放部分.htaccess的功能給使用者自行設(shè)置。
注意:.htaccess是一個(gè)完整的文件名,不是***.htaccess或其它格式(當(dāng)然也有管理員把其設(shè)置成其它名字,但一般都是使用.htaccess)。另外,上傳.htaccess文件時(shí),必須使用ASCII模式,并使用chmod命令改變權(quán)限為:644(RW_R__R__)。每一個(gè)放置.htaccess的目錄和其子目錄都會(huì)被.htaccess影響。例如,在/abc/目錄下放置了一個(gè).htaccess文件,那么/abc/和 /abc/def/內(nèi)所有的文件都會(huì)被它影響,但/index.html不會(huì)被它影響,這一點(diǎn)是很重要的。
二、使用.htaccess配置文件
在配置Apache時(shí),除了可以在主配置文件(http.conf)中配置訪問(wèn)控制之外,還可以使用.htaccess 文件配置對(duì)指定目錄的訪問(wèn)控制。使用.htaccess文件可以改變主配置文件中的配置,但是它只能設(shè)置對(duì)指定目錄的訪問(wèn)控制,這個(gè)目錄就是.htaccess文件存放的目錄。在一個(gè)目錄下設(shè)置了.htaccess文件之后,當(dāng)用戶使用瀏覽器訪問(wèn)此目錄時(shí),Apache會(huì)讀取該文件的配置來(lái)覆蓋主配置文件(http.conf)的配置。
注意:
1.修改.htaccess文件無(wú)需重新啟動(dòng)Apache服務(wù)器,而是立即生效。 2.在可能的情況下應(yīng)該盡量避免使用.htaccess文件,因?yàn)槭褂?htaccess文件會(huì)降低服務(wù)器的運(yùn)行性能。 何時(shí)使用.htaccess文件: 有如下兩種情況需要使用.htaccess文件: *在多個(gè)用戶之間分割配置 *想在不重新啟動(dòng)服務(wù)器的情況下改變服務(wù)器配置 使用.htaccess文件必須經(jīng)過(guò)兩個(gè)配置步驟: *首先在主配置文件中的啟用并控制對(duì).htaccess文件的使用 *然后在需要覆蓋主配置文件的目錄下生成.htaccess文件 在主配置文件中的啟用并控制對(duì).htaccess文件的使用
1.設(shè)置文件名稱
必須保證在主配置文件中包含如下的配置語(yǔ)句: AccessFileName .htaccess
<Files ~ "^\.htaccess">
Order allow,deny Deny from all </Files> 2.控制在.htaccess文件中可以使用的指令組 要控制在.htaccess文件中可以使用的指令組,需要在主配置文件中使用AllowOverride指令。下面列出了可以在AllowOverride指令所使用的指令組。 指令組 可用指令 說(shuō)明
============================ AuthConfig AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require
進(jìn)行認(rèn)證、授權(quán)以及安全的相關(guān)指令
============================= FileInfo DefaultType, ErrorDocument, ForceType, LanguagePriority, SetHandler, SetInputFilter, SetOutputFilter
控制文件處理方式的相關(guān)指令
============================= Indexes AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName
控制目錄列表方式的相關(guān)指令
============================== Limit Allow,Deny,Order
進(jìn)行目錄訪問(wèn)控制的相關(guān)指令
============================== Options Options, XBitHack
啟用不能在主配置文件中使用的各種選項(xiàng)
============================= All 全部指令組
可以使用以上所有指令
============================= None 禁止使用所有指令 禁止處理.htaccess文件 ============================== 3、生成.htaccess文件
當(dāng)在主配置文件中配置了對(duì).htaccess文件的啟用和控制之后,接下來(lái)就可以在需要覆蓋主配置文件的目錄下生成.htaccess文件。.htaccess文件中可以使用的配置指令取決于主配置文件中AllowOverride指令的設(shè)置。 4、使用.htaccess文件舉例
下面舉一個(gè)簡(jiǎn)單的例子說(shuō)明.htaccess文件的使用。 //首先在文檔根目錄下生成一個(gè)private目錄,并創(chuàng)建測(cè)試文件
# cd /var/www/html # mkdir private # cd private # touch test //修改配置前,在客戶瀏覽器查看結(jié)果。 //修改主配置文件 # vi /etc/httpd/conf/httpd.conf //添加如下配置語(yǔ)句 <Directory "/var/www/html/private"> AllowOverride Options </Directory> # //重新啟動(dòng)httpd # service httpd restart //在/var/www/html/private目錄下生成.htaccess文件 # vi /var/www/html/private/.htaccess //添加如下配置語(yǔ)句 Options –Indexes # //在客戶瀏覽器中查看結(jié)果。 //即對(duì)private目錄的訪問(wèn)不生成文件列表 三、.htaccess文件的配置說(shuō)明
Apache可以使用分布在整個(gè)網(wǎng)頁(yè)結(jié)構(gòu)中的特殊文件來(lái)進(jìn)行配置,這些特殊文件通常叫.htaccess,也可以用AccessFileName指令來(lái)改變。.htaccess 文件中的指令的作用域是存放它的那個(gè)目錄及其所有子目錄。.htaccess 文件的語(yǔ)法與主配置文件相同。由于對(duì)每次請(qǐng)求都會(huì)讀取.htaccess 文件,所以對(duì)這些文件的改變會(huì)立即生效。
可以查閱Context了解可以放在.htaccess文件中的指令;服務(wù)器管理員可以通過(guò)AllowOverride指令,來(lái)決定.htaccess 文件中可以生效的指令。
.htaccess 文件(或者"分布式配置文件")提供了針對(duì)目錄改變配置的方法,即在一個(gè)特定的文檔目錄中放置一個(gè)包含一個(gè)或多個(gè)指令的文件,以作用于此目錄及其所有子目錄。作為用戶,所能使用的命令受到限制。管理員可以通過(guò)Apache的AllowOverride指令來(lái)設(shè)置。
- 子目錄中的指令會(huì)覆蓋更高級(jí)目錄或者主服務(wù)器配置文件中的指令。
- .htaccess必須以ASCII模式上傳,最好將其權(quán)限設(shè)置為644。 1、錯(cuò)誤文檔的定位
常用的客戶端請(qǐng)求錯(cuò)誤返回代碼:
401 Authorization Required 403 Forbidden 404 Not Found 405 Method Not Allowed 408 Request Timed Out 411 Content Length Required 412 Precondition Failed 413 Request Entity Too Long 414 Request URI Too Long 415 Unsupported Media Type 常見的服務(wù)器錯(cuò)誤返回代碼: 500 Internal Server Error 用戶可以利用.htaccess指定自己事先制作好的錯(cuò)誤提醒頁(yè)面。一般情況下,人們可以專門設(shè)立一個(gè)目錄,例如errors放置這些頁(yè)面。然后再.htaccess中,加入如下的指令:
ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/internalerror.html 一條指令一行。上述第一條指令的意思是對(duì)于404,也就是沒(méi)有找到所需要的文檔的時(shí)候得顯示頁(yè)面為/errors目錄下的notfound.html頁(yè)面。不難看出語(yǔ)法格式為:
ErrorDocument 錯(cuò)誤代碼 /目錄名/文件名.擴(kuò)展名
如果所需要提示的信息很少的話,不必專門制作頁(yè)面,直接在指令中使用HTML號(hào)了,例如下面這個(gè)例子:
ErrorDocument 401 "你沒(méi)有權(quán)限訪問(wèn)該頁(yè)面,請(qǐng)放棄!"
2、文檔訪問(wèn)的密碼保護(hù)
要利用.htaccess對(duì)某個(gè)目錄下的文檔設(shè)定訪問(wèn)用戶和對(duì)應(yīng)的密碼,首先要做的是生成一個(gè).htpasswd的文本文檔,例如:
zheng:y4E7Ep8e7EYV
這里密碼經(jīng)過(guò)加密,用戶可以自己找些工具將密碼加密成.htaccess支持的編碼。該文檔最好不要放在www目錄下,建議放在www根目錄文檔之外,這樣更為安全些。
有了授權(quán)用戶文檔,可以在.htaccess中加入如下指令了:
AuthUserFile .htpasswd的服務(wù)器目錄
AuthGroupFile /dev/null (需要授權(quán)訪問(wèn)的目錄) AuthName EnterPassword AuthType Basic (授權(quán)類型) require user wsabstract (允許訪問(wèn)的用戶,如果希望表中所有用戶都允許,可以使用 require valid-user)
注:括號(hào)部分為學(xué)習(xí)時(shí)候自己添加的注釋。
3、拒絕來(lái)自某個(gè)IP的訪問(wèn)
如果我不想某個(gè)政府部門訪問(wèn)到我的站點(diǎn)的內(nèi)容,那可以通過(guò).htaccess中加入該部門的IP而將它們拒絕在外。
例如:
order allow,deny
deny from 210.10.56.32 deny from 219.5.45. allow from all 第二行拒絕某個(gè)IP,第三行拒絕某個(gè)IP段,也就是219.5.45.0~219.2.45.255。想要拒絕所有人?用deny from all好了。不止用IP,也可以用域名來(lái)設(shè)定。
4、保護(hù).htaccess文檔
在使用.htaccess來(lái)設(shè)置目錄的密碼保護(hù)時(shí),它包含了密碼文件的路徑。從安全考慮,有必要把.htaccess也保護(hù)起來(lái),不讓別人看到其中的內(nèi)容。雖然可以用其他方式做到這點(diǎn),比如文檔的權(quán)限。不過(guò),.htaccess本身也能做到,只需加入如下的指令:
order allow,deny
deny from all 5、URL轉(zhuǎn)向
我們可能對(duì)網(wǎng)站進(jìn)行重新規(guī)劃,將文檔進(jìn)行了遷移,或者更改了目錄。這時(shí)候,來(lái)自搜索引擎或者其他網(wǎng)站鏈接過(guò)來(lái)的訪問(wèn)就可能出錯(cuò)。這種情況下,可以通過(guò)如下指令來(lái)完成舊的URL自動(dòng)轉(zhuǎn)向到新的地址:
Redirect /舊目錄/舊文檔名 新文檔的地址
或者整個(gè)目錄的轉(zhuǎn)向:
Redirect 舊目錄 新目錄
6、改變?nèi)笔〉氖醉?yè)文件
一般情況下缺省的首頁(yè)文件名有default、index等。不過(guò),有些時(shí)候目錄中沒(méi)有缺省文件,而是某個(gè)特定的文件名,比如在pmwiki中是pmwiki.php。這種情況下,要用戶記住文件名來(lái)訪問(wèn)很麻煩。在.htaccess中可以輕易的設(shè)置新的缺省文件名:
DirectoryIndex 新的缺省文件名
也可以列出多個(gè),順序表明它們之間的優(yōu)先級(jí)別,例如:
DirectoryIndex filename.html index.cgi index.pl default.htm
7、防止盜鏈
如果不喜歡別人在他們的網(wǎng)頁(yè)上連接自己的圖片、文檔的話,也可以通過(guò)htaccess的指令來(lái)做到。
所需要的指令如下:
RewriteEngine on
RewriteCond % !^$ RewriteCond % !^http://(www.)?/.*$ [NC] RewriteRule .(gif|jpg)$ - [F] 如果覺(jué)得讓別人的頁(yè)面開個(gè)天窗不好看,那可以用一張圖片來(lái)代替:
RewriteEngine on
RewriteCond % !^$ RewriteCond % !^http://(www.)?/.*$ [NC] RewriteRule .(gif|jpg)$ [url]http://www./[/url]替代圖片文件名 [R,L] |
|
來(lái)自: software1 > 《IT技術(shù)》