打印

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

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

[Linux] [轉貼]Apache 網頁認證.htaccess 設定方法 ( R9 N$ U5 @% s
9 o# w2 a8 y9 ]4 ?& S. x# a1 F
.htaccess) x. J; i. D* u9 O* H* T7 j
.htaccess 可放在任何一網頁目錄內,當該目錄在 httpd.conf 設定不是 AllowOverride None 便可使用 .htaccess 的功能了,而設定作 AllowOverride All 更可使用 .htaccess 的所有功能了+ D6 _/ s/ z. q0 M! @* R: d8 I/ v
.htaccess 可用作對該目錄及其子目錄進行取存控制,而不用修改 httpd.conf 及不用重新啟動伺服器軟件
! W7 X% Y$ t( X7 p--------------------------------------------------------------------------------( V- I5 L4 q7 t4 ~9 O0 w  n
httpd.conf 的設定3 E' w- y. |) ^% s/ p) e
加上或取消註解 (#) ]定改成 AllowOverride All4 Q) x( T- f7 l1 u, _$ o$ T: r/ J
然後儲存及重新啟動伺服器軟件 * q4 P+ P; U  P$ v6 [
--------------------------------------------------------------------------------
6 v3 e4 W/ \6 F0 a- P# T.htaccess 的用法
# B2 X+ F& h, }4 |" w先把 .htaccess 放在要用的目錄內 (Windows 系統內不可以直接把檔案改名作 .htaccess ,需用間接的方法,如在指令模式下 ren filename.txt .htaccess 或用 FTP 軟件修改該檔名)" U# z0 X, G6 j/ g, ~
用法:
' B2 h/ h3 J4 {( Y7 H5 ]1. 密碼保護
/ U# D2 v, T5 \.htaccess 內寫上:
3 L* a: E3 I6 G( rAuthName "testing"1 N+ ]/ Z3 \$ X5 [5 j' O2 c  n
AuthType Basic
* b8 d, C( _$ C3 S- f2 t; SAuthUserFile "C:/Apache/htdocs/testing/.htpasswd"( \3 H6 J: T9 W9 I& Y( n
require valid-user# \2 B3 ~2 x# b2 j: ]8 }' [" t
AuthName 是當你進入密碼保護時,瀏覽器出現的說明
" J) v4 R+ W: k; ?% P! \AuthUserFile "C:/Apache/htdocs/testing/.htpasswd" 是密碼檔案的位置+ v/ \" @/ X+ N& H1 [1 _
密碼檔案 (.htpasswd) 內寫上:+ _  N& J8 m/ I: O9 S* K* L
user1:password1
5 w+ Q, `, H6 s+ t9 \  F6 y/ Luser2:password2% v+ J, m% L2 _% R* G( \% [
但密碼不應直接寫上,即是如果有一使用者是 test ,密碼是 password ,先用 C:\Apache\bin 內的 htpasswd.exe 把密碼加密,用法如下] require group group1 ,因此只有 group1 的使用者可通過,即 john , peter 及 david
/ C2 f+ x8 I6 B  R
4 [. T6 S0 a0 e0 P1 a2. 自設錯誤報告文件
- `' a7 P$ I  J% F.htaccess 內寫上:" q' O. w" F8 _, ^7 {
ErrorDocument 404 /404.html
( z: ^: P3 t7 \5 a$ ?2 k& p  L! J如果找不到網頁時,便輸出 404.html 的內容,其他錯誤時做法亦然,如:( p( a: }/ o0 x! Q' y9 _, e
ErrorDocument 404 "<html><body>找不到網頁</body></html>! f, |9 N; a" }
ErrorDocument 500 /500.html
3 y8 |( F* j8 x* O% s- a6 m) i5 w2 b# p
% L, A1 m( C1 z  u3. 自設首頁檔案
: i/ ?. C& J- n) y" N.htaccess 內寫上:* b8 s8 J$ [1 z8 t3 ]
DirectoryIndex a.html; O6 P, f5 j0 A1 r9 v* j
首頁檔案便是 a.html 了
( _( T, P5 ^, m
0 j. e- M' g' ~* y1 x4. 禁止讀取檔案: w( M- d8 ]5 Z/ P- v; G7 q
.htaccess 內寫上:- t  z2 ]  P: P
<Files secret.html>
2 u7 l% p7 B5 Korder allow,deny3 e% T3 h! R: l; [) j- p2 W
deny from all: d! H' y; N+ x0 p) Z- u
</Files>
8 l; r3 Y& z9 w7 s  rdeny from all 即所有人皆不能讀取 sercet.html
% U5 P1 I5 ~- ?2 n" V+ m$ {3 G  H/ F8 S) A
而 Apache 1.3 以後的版本,更可以用支援 regular expression 的 filesmatch9 u0 d/ }0 n0 c- @/ v* H. L* N
.htaccess 內寫上:
# e( e& v5 s% T6 P" _<filesmatch "\.jpg">- J, Q( }  B$ W4 u( \
order allow,deny- S5 ^6 [5 G1 k
deny from all
7 ?2 _3 q: a0 {+ Q$ e$ s</filesmatch>5 x* I& R# [/ O" S
即所有人皆不能讀取副檔名為 .jpg 的檔案4 }. t1 n4 I7 F6 |: t( J+ X5 I
/ t- f0 t, J: F- R4 ]
.htaccess 內寫上:
6 x& a: k. @# z- I1 I4 a+ t# x<Files secret.html>
9 x/ M. m' }" _$ M% G% ^( K! Vorder allow,deny$ n/ H9 c2 F0 f: A$ U! N1 C) E) D
allow form all$ z2 r: u0 ]4 o% Z* e; ~. h4 S
deny form 202.202: r4 R& T( l- P  ]
</Files>, c" I  G. k) i; t
即 ip 是以 202.202 開頭的不能讀取副檔名為 secret.html 的檔案3 `$ k5 H! X0 q  E; ~
8 `, [5 N9 G% k  Z# H
.htaccess 內寫上:
% U' U( \1 }0 J2 \' L/ q+ O4 |<Limit GET>
' L" n6 T* k& Q0 ]; @0 v" Eorder deny,allow, h6 E1 J7 C4 V* b' X4 N
deny from all$ w/ p4 e, q8 x
allow from 202.202 domain.com9 v8 s8 Y! |$ \
</Limit>
- s8 C' U6 h; j1 g; c8 ?! P即只允許 ip 是以 202.202 為開頭或域名是 domain.com 的讀取此目錄內的任何內容
) q. O; y$ c& Y8 v
4 I  [0 |+ K$ B. x+ {; `+ V0 F% {7 U.htaccess 內寫上:7 `+ _( h* U# X: A/ i) M7 d
AuthUserFile "C:/Apache/htdocs/testing/.htpasswd"
0 c1 _* T" S6 r( H: K<files sercet.html>( H7 w8 o  V1 p+ D
require user peter6 U( z" ^$ O. ^' r5 ]& {9 ^& y
</files>" ~2 d9 R" y* `; d
即只允許 .htpasswd 內列出的 peter 讀取 sercet.html
' L+ \" s% k/ ]3 h: T$ E0 I& |) |2 V' g& K+ V- I5 g) D
5. 重新導向文件
/ r3 L4 s; D% R, I5 v! \.htaccess 內寫上:
  ^; d' Q: y0 e% }% b) NRedirect /old http://url/new
3 F0 [7 {* o! o# f當用戶要求 /old 時,伺服器便把其重新導向至 http://url/new ,或在 .htaccess 內寫上:
# B: u5 b9 n2 U6 _) Z4 DRedirect permanent /old http://url/new
* e1 \3 N! U# I6 B! T% b) J3 z當用戶要求 /old 時,伺服器便叫瀏覽器把其永遠重新導向至 http://url/new
1 Q, W- V: Q9 k, m7 @
: v& Z! d, t6 Q# j6. 防止列出目綠內的檔案
( i  G3 C$ S3 m8 D, f.htaccess 內寫上:
+ Z/ s/ Z$ {" {0 V1 R! SOption -Indexes% L$ M2 \2 q* ?  u% `/ [4 k6 c
這便不能列出檔案目錄了
# ?/ \2 A% p1 x6 x0 ]/ O  |.htaccess 內寫上:
: h3 p+ `) s: M$ ^IndexIgnore *.zip *.txt# ~9 Q0 Y1 R) U6 h" C2 k
這便不列出檔案目錄內的 .zip 與 .txt 檔了$ V; N# M. J3 `& \  T0 k
/ y$ |$ }. H$ Y; U
註: .htaccess 的大部分內容 (如:密碼保護) 可以寫回 httpd.conf 相應的目錄設定內( <Directory> )

TOP

首先在你要保護的目錄下建立一個名為.htaccess的檔案,內容大致如下: # x+ s" s1 Y" e% V" y
8 q  x& X( k& p' k( g
# 隨便取個名字吧,它會出現在瀏覽器的蹦出視窗中。 : V/ _9 k! X& c3 d# u
AuthName 阿達的祕密基地 7 A! ~2 y1 L0 i5 s* j+ b
# 編碼方式,目前只支援Basic一種而已。 . L: X  @+ p5 Y  e. H
AuthType Basic
* @- t  X2 J/ u& r# 密碼檔的絕對路徑,可用htpasswd指令建立。
5 G9 y! k/ p" j4 i1 v6 q9 CAuthUserFile /home/.../filename 5 M% O; O3 p3 n" G, U
# 若下面有指定 require group,則需要group檔的絕對路徑。
& u+ r, I; |4 s0 t: Q& K3 TAuthGroupFile /home/.../filename
  R. [0 e: P1 i0 m. F' u$ }% t/ G6 E& N7 ~1 |, e! j8 I
<Limit GET POST> 0 r& q$ J, E( B( ^7 l+ a4 ^! g. x$ `
require user user1 user2 ...
: V, l; {; x' D# n; p! F8 Y! y8 }require group group1 group2 ... 8 M* ~3 q& K6 b  w- J$ M2 N
</Limit>
# T) \) i5 V% l, ^( p
  ]- f* W. S8 H  Y* `, d
' S& _+ D" s8 k& f2 y/ P; \它的密碼認證方式有二種,一種是指定users,也就是只有指定的username才有資格進入這個受保護的目錄。另一種是則指定group,凡屬於指定的group的users才有資格進入這個受保護的目錄,而group中到底有哪些users是記錄在AuthGroupFile中所指定的檔案,users的密碼檔則是指定在AuthUserFile中。且讓我們來看看這兩個檔的格式: 0 i4 k! s/ I% f: U
4 C( B" q3 s0 r" Y
group檔: / _2 O1 u6 C, \4 B1 @$ ~
group1:user1 user2 ... , X3 h, h) }7 V. j1 q, y( M0 x
group2:user3 user4 ...
' b4 \3 N, W9 M3 z* h" @  H' l, A...
' E6 T% K% X& P) p  @
" E( l8 q2 H6 m9 C9 l: u6 epasswd檔:
9 y6 x. W- p* L# o' g, B6 ^user1:password . w. s% H7 \! y6 {' m0 D9 B% S8 |
user2:password
$ Z/ T) ^. F7 l; m/ O& G... 6 O$ M( F5 W& `8 D& K; O
2 v3 t" s/ t' G' Y! H) T% l
密碼檔裡的密碼是編碼過的,你可以使用htpasswd指令來建立密碼檔或新增users。而且由於密碼是用crypt函數編碼的,所以你也可以自己寫個CGI程式來新增users。 ! G' X7 t4 C0 W9 L

2 i6 E* j9 |6 I+ ]& i另外還有個安全問題要提醒你:密碼檔不要放在www文件的樹目錄中,最好是放在www目錄外面,以免密碼檔被不法之徒偷去猜密碼。 8 y* N: t# A% c7 ^
0 F6 @/ ^8 x- a" D
OK!!就這麼簡單,現在你可以試試看成功了沒...

TOP

發新話題