在利用.htaccess的Rewrite規則實現Discuz論壇的偽靜態鏈接中已經提到過了.htaccess的重定向的使用,這裡讓我們來比較全面的瞭解一下.htaccess吧。.htaccess是Apache服務器的一個非常強大的分佈式配置文件。正確的理解和使用.htaccess文件,可以幫助我們優化自己的服務器或者虛擬主機。比如可以利用.htaccess文件創建自定義的「404 error」頁面,更改很多服務器的配置。而我們所需要做的,僅僅是在這個文本文檔中添加幾條簡單的指令而已。
! y7 m9 E4 N! x* t- y+ B2 q$ \- p0 UUnix或Linux系統,或任何版本的Apache Web服務,都是支持.htaccess的,但是有的主機服務商可能不允許你自定義自己的.htaccess文件。國外目前主流的虛擬主機提供商,幾乎全部都支持自定義功能。
7 C$ e4 n$ R! s6 P* H4 ^" q5 Z2 U) }: w啟用.htaccess,需要修改httpd.conf,啟用AllowOverride,並可以用AllowOverride限制特定命令的使用
9 E! j( t! \- e! V如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令來改變。例如,需要使用.config ,則可以在服務器配置文件中按以下方法配置:
! E* y" w$ z. o5 MAccessFileName .config
( C: S9 s1 L' n* V) m+ H籠統地來說,.htaccess可以幫我們實現包括:文件夾密碼保護、用戶自動重定向、自定義錯誤頁面、改變你的文件擴展名、封禁特定IP地址的用戶、只允許特定IP地址的用戶、禁止目錄列表,以及使用其他文件作為index文件等一些功能。
5 N$ d' k: w* v* \1 d/ c●創建一個.htaccess文檔
3 r1 p/ v r! l4 ?/ e5 {.htaccess是一個古怪的文件名(從Win的角度來說,它沒有文件名,只有一個由8個字母組成的擴展名,不過實際上它是linux下的命名,而很多linux下的東西,我們向來都會認為很古怪的),在Win系統中是不可以直接通過「新建」文件來創建的,不過我們可以利用cmd中的copy來實現,比如copy sample.txt .htaccess。也可以先創建一個htaccess.txt,然後Ftp到服務器,通過FTP來修改文件名。
0 ~9 N" Y; B3 g●自定義錯誤頁
+ a; l8 B+ S6 I.htaccess的一個應用是自定義錯誤頁面,這將使你可以擁有自己的、個性化的錯誤頁面(例如找不到文件時),而不是你的服務商提供的錯誤頁或沒有任何頁面。這會讓你的網站在出錯的時候看上去更專業。你還可以利用腳本程序在發生錯誤的時候通知你(例如當找不到頁面的時候自動Email給你)。; h S- X) Y* P. ^; L
你所知道的任何頁面錯誤代碼(像404找不到頁面),都可以通過在.htaccess文件裡加入下面的文字將其變成自定義頁面:
* Y! m5 [6 T* P# V2 L5 lErrorDocument errornumber /file.html* U8 Z1 |: o g5 R
舉例來說,如果我的根目錄下有一個notfound.html文件,我想使用它作為404 error的頁面:
9 ]% ?% E1 @" v, T2 [, _6 W$ xErrorDocument 404 /notfound.html j# m8 S4 P3 s4 i( V$ y# k$ t
如果文件不在網站的根目錄下,你只需要把路徑設置為:1 G% F5 U. O' ~$ n% g" P8 {
ErrorDocument 500 /errorpages/500.html+ Z5 w& W# c2 c4 ~( |8 E
以下是一些最常用的錯誤:( a. q9 Y! `& K% _% c# g6 I
401 – Authorization Required 需要驗證
6 e$ F0 J+ [; ^. c400 – Bad request 錯誤請求
: x% p5 b% G3 \" R403 – Forbidden 禁止
+ b* G5 a# [- F* l500 – Internal Server Error 內部服務器錯誤
4 h' t/ |* |* J/ X, q404 – Wrong page 找不到頁面
" [4 P5 B4 X) z6 ^9 o1 v' X" ^接下來,你要做的只是創建一個錯誤發生時顯示的文件,然後把它們和.htaccess一起上傳。 9 C2 y1 }, Q5 o+ t! ]6 H
●.htaccess命令) q$ H. j. V/ b- p8 |
▼禁止顯示目錄列表
0 O4 C8 ~1 |3 k, R+ P1 Z有些時候,由於某種原因,你的目錄裡沒有index文件,這意味著當有人在瀏覽器地址欄鍵入了該目錄的路徑,該目錄下所有的文件都會顯示出來,這會給你的網站留下安全隱患。! c" k+ R" C% p5 ^1 p% |7 a# E
為避免這種情況(而不必創建一堆的新index文件),你可以在你的.htaccess文檔中鍵入以下命令,用以阻止
7 |& D' a) Z2 }' Z目錄列表的顯示:% M7 ]6 d6 _/ e. G
Options -Indexes
0 K; `, J0 F: F# f; p% a6 J$ U$ \( r▼阻止/允許特定的IP地址: a0 C( k+ ]3 t) g3 ?! G+ |
某些情況下,你可能只想允許某些特定IP的用戶可以訪問你的網站(例如:只允許使用特定ISP的用戶進入某個目錄),或者想封禁某些特定的IP地址(例如:將低級用戶隔離於你的信息版面外)。當然,這只在你知道你想攔截的IP地址時才有用,然而現在網上的大多數用戶都使用動態IP地址,所以這並不是限制使用的常用方法。! V. P% o2 B3 N: x+ ^4 w
你可以使用以下命令封禁一個IP地址:
$ X2 w3 l% O9 z2 z9 V% \deny from 000.000.000.0009 H! P4 n) b1 e* \
這裡的000.000.000.000是被封禁的IP地址,如果你只指明了其中的幾個,則可以封禁整個網段的地址。如你輸入210.10.56.,則將封禁210.10.56.0~210.10.56.255的所有IP地址。4 n+ k7 A( K0 ]7 j
你可以使用以下命令允許一個IP地址訪問網站:
+ z. i8 ~! A( D+ [& M' pallow from 000.000.000.000
1 u v0 H6 L$ A" S被允許的IP地址則為000.000.000.000,你可以像封禁IP地址一樣允許整個網段。0 N b: e; m& X9 E0 F( z
如果你想阻止所有人訪問該目錄,則可以使用:
# L1 N) H) M3 q+ R2 x$ ydeny from all
, Y5 H- T6 t# U2 O: @" Q- }; M不過這並不影響腳本程序使用這個目錄下的文檔。
* u$ l$ a6 A- I8 j1 @! y- @▼替換index文件
0 D3 I6 T1 t, ?也許你不想一直使用index.htm或index.html作為目錄的索引文件。舉例來說,如果你的站點使用PHP文件,你可能會想使用 index.php來作為該目錄的索引文檔。當然也不必局限於「index」文檔,如果你願意,使用.htaccess你甚至能夠設置 foofoo.balh來作為你的索引文檔!6 W7 a0 u8 S. S7 I5 f) j
這些互為替換的索引文件可以排成一個列表,服務器會從左至右進行尋找,檢查哪個文檔在真實的目錄中存在。如果一個也找不到,它將會把目錄列表顯示出來(除非你已經關閉了顯示目錄文件列表)。0 F! h' @& C! R
DirectoryIndex index.php index.php3 messagebrd.pl index.html index.htm
/ c2 K, q$ e5 b▼重定向(rewrite)
+ p9 h x/ U% |4 h x1 f.htaccess 最有用的功能之一就是將請求重定向到同站內或站外的不同文檔。這在你改變了一個文件名稱,但仍然想讓用戶用舊地址訪問到它時,變的極為有用。另一個應用(我發現的很有用的)是重定向到一個長URL,例如在我的時事通訊中,我可以使用一個很簡短的URL來指向我的會員鏈接。以下是一個重定向文件的例子:/ b1 w, K5 a* a6 \
Redirect /location/from/root/file.ext http: //minidx.com/new/file/location.xyz, C. s1 q3 | R8 ]
上述例子中,訪問在root目錄下的名為oldfile.html可以鍵入:
e+ l; R4 p: E) R1 r3 G+ [/oldfile.html) \3 @" W# T+ R% Q( c* F
訪問一個舊次級目錄中的文件可以鍵入:
2 S9 r6 b j! Y+ `, C: O y: Z/old/oldfile.html
. W: R* `: U9 R3 `你也可以使用.htaccess重定向整個網站的目錄。假如你的網站上有一個名為olddirectory的目錄,並且你已經在一個新網站http: //minidx.com/newdirectory/上建立了與上相同的文檔,你可以將舊目錄下所有的文件做一次重定向而不必一一聲明:% L! T: M+ Q8 @: V
Redirect /olddirectory http: //minidx.com/newdirectory0 m) H; b6 L$ Y: R
這樣,任何指向到站點中/olddirectory目錄的請求都將被重新指向新的站點,包括附加的額外URL信息。例如有人鍵入:. j; P: G4 D" B
http: //minidx.com/olddirecotry/oldfiles/images/image.gif Q M, K, @9 L N, e# v; ?) [
請求將被重定向到:; Y7 o4 ?+ H8 r6 r
http: //minidx.com/newdirectory/oldfiles/images/image.gif
. I0 I! c& y. }* L9 {9 X如果正確使用,此功能將極其強大。
+ g1 a: j& i& a註:由於Windows Live Writer編輯這篇文章的時候,遇到http:// 就會自動添加超級鏈接,所以上面都特意加了一個空格,而這原本是沒有的。 % V. X# p/ Y5 m
●密碼保護5 c8 y8 Y; \/ Q/ F
儘管有各種各樣的.htaccess用法,但至今最流行的也可能是最有用的做法是將其用於網站目錄可靠的密碼保護。儘管JavaScript等也能做到,但只有.htaccess具有完美的安全性(即訪問者必須知曉密碼才可以訪問目錄,並且絕無「後門」可走)。/ X4 a" R0 r- ]* y/ H- ]
利用.htaccess將一個目錄加上密碼保護分兩個步驟。第一步是在你的.htaccess文檔裡加上適當的幾行代碼,再將.htaccess文檔放進你要保護的目錄下:
* v# ~" D0 p- m# zAuthName 「Section Name」: S; w7 p& @! z
AuthType Basic
5 e2 k: q% [: f6 v8 V/ oAuthUserFile /full/path/to/.htpasswd+ E( h. Q7 z# S: d: D' v
Require valid-user' c0 h. T, H4 \6 s `
你可能需要根據你的網站情況修改一下上述內容中的一些部分,如用被保護部分的名字」Members Area」,替換掉「Section Name」。
, i8 T7 i# J* n/full/parth/to/.htpasswd則應該替換為指向.htpasswd文件(後面詳述該文檔)的完整服務器路徑。如果你不知道你網站空間的完整路徑,請詢問一下你的系統管理員。; u( J# n! H1 \5 H5 G+ _
密碼保護的.htpasswd文件$ m& Q" M4 O1 j8 ?( c& L, \
目錄的密碼保護比.htaccess的其他功能要麻煩些,因為你必須同時創建一個包含用戶名和密碼的文檔,用於訪問你的網站,相關信息(默認)位於一個名為.htpasswd的文檔裡。像.htaccess一樣,.htpasswd也是一個沒有文件名且具有8位擴展名的文檔,可以放置在你網站裡的任何地方(此時密碼應加密),但建議你將其保存在網站Web根目錄外,這樣通過網絡就無法訪問到它了。
+ [4 J3 i& a+ ]創建好.htpasswd文檔後(可以通過文字編輯器創建),下一步是輸入用於訪問網站的用戶名和密碼,應為:
W7 |( x1 z c4 F# R! i/ z/ ?username:password
0 b, u' }6 I" m( U/ R+ ^「password」 的位置應該是加密過的密碼。你可以通過幾種方法來得到加密過的密碼:一是使用一個網上提供的permade腳本或自己寫一個;另一個很不錯的 username/password加密服務是通過KxS網站,這裡允許你輸入用戶名及密碼,然後生成正確格式的密碼。對於多用戶,你只需要在.htpasswd文檔中新增同樣格式的一行即可。另外還有一些免費的腳本程序可以方便地管理.htpasswd文檔,可以自動新增/移除用戶等。+ f" Y$ t! k' v9 b7 c* m
當你試圖訪問被.htaccess密碼保護的目錄時,你的瀏覽器會彈出標準的username/password對話窗口。如果你不喜歡這種方式,有些腳本程序可以允許你在頁面內嵌入username/password輸入框來進行認證,你也可以在瀏覽器的URL框內以以下方式輸入用戶名和密碼(未加密的):, l' g5 p3 T! I
http://username:[email protected]/directory/
( |, A$ h2 Z! x* T* L3 ?比較常用的基本上就是這些了,如果想更加具體的瞭解.htaccess的使用,那可以參照Appache的doc中相關的文檔。 |
|