打印

[Linux] [轉貼]Apache 網頁認證.htaccess 設定方法

[Linux] [轉貼]Apache 網頁認證.htaccess 設定方法

[Linux] [轉貼]Apache 網頁認證.htaccess 設定方法
' v' E/ d* X/ @1 Y) V
4 v, ^( |2 G' x.htaccess& Y  y9 I: s. q: _3 L/ T
.htaccess 可放在任何一網頁目錄內,當該目錄在 httpd.conf 設定不是 AllowOverride None 便可使用 .htaccess 的功能了,而設定作 AllowOverride All 更可使用 .htaccess 的所有功能了2 G1 O' ~4 Y2 i& l
.htaccess 可用作對該目錄及其子目錄進行取存控制,而不用修改 httpd.conf 及不用重新啟動伺服器軟件
; j. T! E% j2 U2 j--------------------------------------------------------------------------------
- V- H2 C4 j" m! n: ehttpd.conf 的設定3 l' L0 X7 d. `0 Q
加上或取消註解 (#) ]定改成 AllowOverride All
+ Y9 f5 w' h* y7 y- ~$ J6 Z然後儲存及重新啟動伺服器軟件
! k: g8 V* Q4 N# \) z" M& w--------------------------------------------------------------------------------0 b! S2 g' I. r. V) @7 R
.htaccess 的用法7 F+ S5 w" H. A# L) l  S- Z
先把 .htaccess 放在要用的目錄內 (Windows 系統內不可以直接把檔案改名作 .htaccess ,需用間接的方法,如在指令模式下 ren filename.txt .htaccess 或用 FTP 軟件修改該檔名): n% Y9 h% X5 V8 U
用法:. _. w) i; z! i3 e: }% G( r3 _
1. 密碼保護
- ^1 S4 A' l7 _4 P, H; |" k# W.htaccess 內寫上:; R( C& `& O: ~; Z1 c- r. j+ h
AuthName "testing"
8 z& t8 x+ H) r( UAuthType Basic: v. h6 l+ l3 p7 P: o, s
AuthUserFile "C:/Apache/htdocs/testing/.htpasswd"0 ^% ^  f7 j9 Z+ f
require valid-user
, F4 c' ^# s( l; ]' _' o: qAuthName 是當你進入密碼保護時,瀏覽器出現的說明7 u& N( l, ^6 p( t" P
AuthUserFile "C:/Apache/htdocs/testing/.htpasswd" 是密碼檔案的位置
) U9 L# K0 G9 p1 l2 J. P$ n密碼檔案 (.htpasswd) 內寫上:' n3 G7 Z5 f" W9 t) H. e
user1:password1% A; X9 k- n0 V
user2:password2
* X! P2 F3 J& k1 [( f+ K: L4 C5 ^# f但密碼不應直接寫上,即是如果有一使用者是 test ,密碼是 password ,先用 C:\Apache\bin 內的 htpasswd.exe 把密碼加密,用法如下] require group group1 ,因此只有 group1 的使用者可通過,即 john , peter 及 david0 V( `: m. N0 K# J6 `. n5 i# h0 r
( {9 D$ X' l+ u8 I' K
2. 自設錯誤報告文件
# J+ r6 ?. j8 G. S.htaccess 內寫上:! f0 K; N. R# l- }8 |+ ?9 F  H' _
ErrorDocument 404 /404.html" k9 H/ H3 L& ]/ H+ S
如果找不到網頁時,便輸出 404.html 的內容,其他錯誤時做法亦然,如:
$ e9 {# `$ c+ L6 R; c4 dErrorDocument 404 "<html><body>找不到網頁</body></html>
% P! t+ D) p6 y) {  s7 V7 LErrorDocument 500 /500.html
  ?6 x4 n8 |5 W  m3 u5 h
+ z0 d! S1 j1 W5 T6 O5 D% R4 V3. 自設首頁檔案" Z8 ^: S1 E# x; v' l
.htaccess 內寫上:( C8 e# `0 |% W7 v. |+ o
DirectoryIndex a.html
" G4 b& }$ h8 V9 r& G首頁檔案便是 a.html 了
8 }  E% y  ]# R7 P( S& I  q5 \( _' G3 \7 U
4. 禁止讀取檔案
( a2 D  |- p9 v4 f.htaccess 內寫上:" V. D  a6 ]: t* j
<Files secret.html>
" C6 T# D6 w1 x8 torder allow,deny0 d  N6 ?3 Y/ H8 B
deny from all1 G; v: s# c1 U" W$ Q6 E; N2 h: I9 ^
</Files>" J4 l! R+ C# a* b2 @3 F
deny from all 即所有人皆不能讀取 sercet.html
% B% |) j+ F  v+ H3 ]- n  B$ v. C( m# x9 Y) P
而 Apache 1.3 以後的版本,更可以用支援 regular expression 的 filesmatch4 c: D! N2 F8 A$ z6 j) y" [1 d
.htaccess 內寫上:
& \9 B6 x: R: G" D+ _. n. v9 ~" I<filesmatch "\.jpg">4 }: a" J; `# \
order allow,deny6 P2 S5 r( T% x+ ^* N
deny from all
8 \% Z) N# f" d" c9 G4 x3 [  {</filesmatch>: m5 U' a+ G+ H) T. k$ Q5 t. W! ^
即所有人皆不能讀取副檔名為 .jpg 的檔案
. T; b! S+ p! c* T4 j, G( Z2 J! ?; p/ R7 `. Z! O. m
.htaccess 內寫上:( X, o/ @$ O; Y: ~& ~
<Files secret.html>! Q  K/ |7 I- Z( f4 S' c/ D" |
order allow,deny
  L9 U$ }% O# c/ {9 \. f" d) W% qallow form all) u* Y6 p1 k* C; p2 K: O
deny form 202.202
. n* _  q5 ]( T1 L4 q</Files>
. I7 \" L8 p, u: ~8 p即 ip 是以 202.202 開頭的不能讀取副檔名為 secret.html 的檔案0 B3 q3 [0 _0 P, {: M. T

+ a. X" S0 @4 h% n5 K.htaccess 內寫上:
: q$ l7 D8 h: S3 p( ^# y1 h9 m<Limit GET>) \3 g/ h2 G. X1 |5 z
order deny,allow/ G7 q$ j1 O5 U( R% `% @' m
deny from all
, e! o3 r: [$ |0 H  m4 L6 I* A# F. j/ wallow from 202.202 domain.com# g+ Z: s* d3 w/ h! m; S. b8 r
</Limit>4 L$ ?  T" K8 a9 N# [3 l- |0 @& P  J
即只允許 ip 是以 202.202 為開頭或域名是 domain.com 的讀取此目錄內的任何內容
' f; t8 T0 f: n" B0 _2 Q  |$ u4 v) r7 o! G: @5 F9 D
.htaccess 內寫上:
0 H% P: D4 Z8 DAuthUserFile "C:/Apache/htdocs/testing/.htpasswd"3 D- _: }. @5 ^  E# L2 \
<files sercet.html>; F% \0 {' \5 O
require user peter1 M; ^: B- v' T3 v# M" e! n7 Y7 S3 O0 [
</files>  B, C, t# m! x( M2 g$ e
即只允許 .htpasswd 內列出的 peter 讀取 sercet.html7 u; S# R0 r, i$ X

: C( C. f8 |( d. A- H5. 重新導向文件- v2 y# a' h9 g
.htaccess 內寫上:- F7 X3 _% |/ E9 q
Redirect /old http://url/new
3 G+ t) D. r- v3 c/ k4 Q當用戶要求 /old 時,伺服器便把其重新導向至 http://url/new ,或在 .htaccess 內寫上:
" g+ ?0 h- z% i3 v- S% E5 B" uRedirect permanent /old http://url/new, P) C, }4 V0 o; C
當用戶要求 /old 時,伺服器便叫瀏覽器把其永遠重新導向至 http://url/new
# s4 }1 Y3 p7 I3 Z! N" [# F
( y8 e4 ]" i4 s9 o& ~8 o5 C2 r6 z6. 防止列出目綠內的檔案7 q! k) O5 e7 \7 V6 ?% d
.htaccess 內寫上:4 s; ?) y! {% U( w& ^, X/ n
Option -Indexes
& `0 I8 q# y7 i" W) }這便不能列出檔案目錄了
8 X2 ~  g) m' l. Y9 ?& Q$ p.htaccess 內寫上:- J' Y6 m$ S7 a( c$ f8 @6 {& W9 v
IndexIgnore *.zip *.txt3 R8 A9 _6 I# x; H1 c4 ^
這便不列出檔案目錄內的 .zip 與 .txt 檔了7 o" e/ [1 `4 c1 t3 |  o
5 h) H6 s: @7 ^" ^( m* @
註: .htaccess 的大部分內容 (如:密碼保護) 可以寫回 httpd.conf 相應的目錄設定內( <Directory> )

TOP

首先在你要保護的目錄下建立一個名為.htaccess的檔案,內容大致如下:
3 J) G) P7 F2 D7 f  N
; p1 x9 T. Z* p2 ]  F# 隨便取個名字吧,它會出現在瀏覽器的蹦出視窗中。
2 w+ ]( V4 z+ r$ bAuthName 阿達的祕密基地
* g' e+ M* B* R3 q2 H3 r9 i* K# 編碼方式,目前只支援Basic一種而已。
2 a/ `2 k  x7 j9 HAuthType Basic 0 J+ f) y% p; Y! n: t/ B
# 密碼檔的絕對路徑,可用htpasswd指令建立。 8 S( [0 O$ M8 ]
AuthUserFile /home/.../filename
6 |: C" M( r/ p# 若下面有指定 require group,則需要group檔的絕對路徑。 1 q2 L. ^" ]" o, x3 `( ?
AuthGroupFile /home/.../filename ; N; f* e/ v8 _2 j' s! i
2 j( X" x$ a8 |+ ]. N( [. A
<Limit GET POST> # G& Q; `2 J% e$ Y/ ?4 X
require user user1 user2 ... % f& w  T1 T* U/ \; A
require group group1 group2 ...
) V4 Y$ a  I7 P8 p7 E8 S</Limit> 5 b% W- h" n. R, K& @

$ j) P  ?+ g: Q& ^/ s% Z0 f; d" U3 ~& ?  w2 C
它的密碼認證方式有二種,一種是指定users,也就是只有指定的username才有資格進入這個受保護的目錄。另一種是則指定group,凡屬於指定的group的users才有資格進入這個受保護的目錄,而group中到底有哪些users是記錄在AuthGroupFile中所指定的檔案,users的密碼檔則是指定在AuthUserFile中。且讓我們來看看這兩個檔的格式:
' y% t; L1 [' h+ A# K
# q$ G0 v+ d9 M  Xgroup檔:
0 I3 R$ I- A* e4 \group1:user1 user2 ...
0 w* v4 K3 v/ ~, i1 M& `group2:user3 user4 ... ( ^6 z; j. ~. Y. D1 Z  H
...
7 A  P! k  ]/ W- C* \* `* m" [% I% P$ ?8 n8 @2 I: W) q
passwd檔:
# z, ^9 I: A" K: N6 D, X$ kuser1:password - r8 r: s) G( j! t5 {6 j0 P/ m# w
user2:password : p3 |' |$ j$ x4 E. M
... $ X$ ]7 I. b+ `0 r: f, e

3 A) s. T: n( B! @密碼檔裡的密碼是編碼過的,你可以使用htpasswd指令來建立密碼檔或新增users。而且由於密碼是用crypt函數編碼的,所以你也可以自己寫個CGI程式來新增users。
2 b, P8 `; p. |5 f
+ Z; `/ F* a) M5 r" k" o另外還有個安全問題要提醒你:密碼檔不要放在www文件的樹目錄中,最好是放在www目錄外面,以免密碼檔被不法之徒偷去猜密碼。
, F$ F% z! W& V& d) G$ A/ Y7 \8 o: T+ `7 e, p: S6 [
OK!!就這麼簡單,現在你可以試試看成功了沒...

TOP

發新話題