打印

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

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

[Linux] [轉貼]Apache 網頁認證.htaccess 設定方法 , W0 p, |  n* H/ t! o1 \* w

( V# T5 c$ h7 c; }.htaccess" Z6 N! @& R6 I) U
.htaccess 可放在任何一網頁目錄內,當該目錄在 httpd.conf 設定不是 AllowOverride None 便可使用 .htaccess 的功能了,而設定作 AllowOverride All 更可使用 .htaccess 的所有功能了
: Z: B; A; x% d5 A* k5 @# r6 G6 |2 R.htaccess 可用作對該目錄及其子目錄進行取存控制,而不用修改 httpd.conf 及不用重新啟動伺服器軟件 / E* Y3 K# O0 N4 }  d& }. v: N% P
--------------------------------------------------------------------------------
' |6 e+ A& _6 g* }. v/ R: Jhttpd.conf 的設定* w- V+ i. M' ~7 f
加上或取消註解 (#) ]定改成 AllowOverride All
# g) i9 p0 R7 k7 t2 `  l, s& P然後儲存及重新啟動伺服器軟件 # ^; y( y$ b/ V$ J5 t7 U7 O
--------------------------------------------------------------------------------
! B6 `& E# u" c2 p.htaccess 的用法
8 _- e( b3 z2 K3 g2 J5 e先把 .htaccess 放在要用的目錄內 (Windows 系統內不可以直接把檔案改名作 .htaccess ,需用間接的方法,如在指令模式下 ren filename.txt .htaccess 或用 FTP 軟件修改該檔名)7 Q! S' p$ p  j* c  X+ p; t% R
用法:2 }: d0 b6 Y! ~+ G9 t: K/ F
1. 密碼保護+ X5 E5 s7 F" ^
.htaccess 內寫上:3 A' f6 X5 `* L5 v3 V: R1 {0 l2 K
AuthName "testing"
; ~2 R# N, c# V9 l) |6 A7 sAuthType Basic
( c2 I4 F  W/ o5 x- b  mAuthUserFile "C:/Apache/htdocs/testing/.htpasswd". J) e* a! Z' s3 |. N
require valid-user
+ c& i$ J& N: O: _6 VAuthName 是當你進入密碼保護時,瀏覽器出現的說明' H4 `$ R. ?5 [& L# n6 p  Q, E% V
AuthUserFile "C:/Apache/htdocs/testing/.htpasswd" 是密碼檔案的位置$ T0 p7 C- o5 f# Y
密碼檔案 (.htpasswd) 內寫上:5 B2 R4 X! }) `9 w
user1:password18 D  [# [. l3 ~% q' J) t
user2:password2
* q. X0 C2 ]- c' w但密碼不應直接寫上,即是如果有一使用者是 test ,密碼是 password ,先用 C:\Apache\bin 內的 htpasswd.exe 把密碼加密,用法如下] require group group1 ,因此只有 group1 的使用者可通過,即 john , peter 及 david
& q1 l$ K7 s: {( F9 [! u  R
; Q7 T' F% C3 ^! R0 x9 h$ w2. 自設錯誤報告文件
+ r5 X; }) P% x* U, x$ J.htaccess 內寫上:
+ k5 ?! i! g! J8 }, j! t( tErrorDocument 404 /404.html( }# P7 _: C& G; a" G$ d
如果找不到網頁時,便輸出 404.html 的內容,其他錯誤時做法亦然,如:3 h4 W( _, u; @1 i4 \# q) Q
ErrorDocument 404 "<html><body>找不到網頁</body></html>
/ i" v- k5 C8 r0 y; c/ J5 E9 o+ HErrorDocument 500 /500.html" {# x! b1 J) A
$ p7 t' [% B+ M) Z# `
3. 自設首頁檔案
; f6 M6 R' _1 u: ?. w0 q.htaccess 內寫上:9 l; m2 d, G% Z9 W+ L- L
DirectoryIndex a.html
% V8 E8 _- @; x, c" [" K+ L首頁檔案便是 a.html 了
# R0 Z/ u  \" I5 Z! i! o' |5 g- {3 L7 `) e4 `6 v7 Y6 Q1 k
4. 禁止讀取檔案
: D" l: X, D% d  K0 |6 |. [.htaccess 內寫上:+ y1 C# p: P$ b, t! Z9 N$ z. _
<Files secret.html>* i4 R  t% s5 o5 ?: F: f
order allow,deny
1 a0 j0 [( M" Kdeny from all
+ S) s& G* h3 [. T- I: a2 H</Files>
; ^2 U5 U9 J; Ndeny from all 即所有人皆不能讀取 sercet.html
4 Q1 T; ^. x1 d( ^& y) {
" ]; n0 v; r# m" l7 }而 Apache 1.3 以後的版本,更可以用支援 regular expression 的 filesmatch
9 W$ k/ F1 f4 w* N0 q" U; H/ O7 K2 s.htaccess 內寫上:
  ~% I6 o: b; |1 C  }: {<filesmatch "\.jpg">2 P+ e# D% y/ ^
order allow,deny
- a1 B. b- r8 R6 Vdeny from all
$ h; o8 \5 x3 p4 A+ @</filesmatch>: W: M( l0 x9 G! \$ \- k6 G
即所有人皆不能讀取副檔名為 .jpg 的檔案
& K* S  J  E. j+ _# D0 @* y8 S$ N. O9 c+ {2 G. L: w
.htaccess 內寫上:
" N1 V8 a; c* y7 o8 J<Files secret.html>$ J2 r0 h; Q5 b* e
order allow,deny% X  a, J" }! P( Y6 ^8 ~
allow form all9 N& ]1 t" T# [3 O, Y
deny form 202.202, c* d+ h; @* a) g
</Files>
5 M' T+ K9 h( ^5 i- x即 ip 是以 202.202 開頭的不能讀取副檔名為 secret.html 的檔案
! m0 F$ w. Q& X9 }6 a4 b/ Y5 q2 F2 [3 K6 n1 t! W) l
.htaccess 內寫上:& F$ q, z! F/ l0 T8 P
<Limit GET>3 }1 z& {  N* [" r9 R5 u1 a
order deny,allow$ Q! r: `# H  g4 e' g& j# D: i- v
deny from all
( h2 I' z% x- @( K  Rallow from 202.202 domain.com  T7 ~% s$ \; r" m1 k% K) p& R
</Limit>
0 C0 K# |# P8 c) t$ Q* p7 z3 v即只允許 ip 是以 202.202 為開頭或域名是 domain.com 的讀取此目錄內的任何內容
/ \1 Y& q) p* y
1 z+ R& V- Q/ a  s- |4 L" r6 u8 q- F.htaccess 內寫上:
. Z! f7 }3 a: `9 e) k/ bAuthUserFile "C:/Apache/htdocs/testing/.htpasswd"
3 I9 m4 G2 |- V: g) x- R/ z1 U) x<files sercet.html>
3 u5 r6 Y1 f1 R2 Z' R' Y% i+ l% g3 @* orequire user peter; g9 k" Z- z7 b
</files>
) D7 x. P0 n' g7 B2 z' l即只允許 .htpasswd 內列出的 peter 讀取 sercet.html
& V% D4 i& T; K& x' P, a9 L, D' x% h8 ~5 E1 g
5. 重新導向文件1 {3 P- M6 U3 M) ?; E
.htaccess 內寫上:
0 L' e: g7 Z( }3 V3 y0 NRedirect /old http://url/new8 W% k$ `, o' n6 w+ m: i7 T
當用戶要求 /old 時,伺服器便把其重新導向至 http://url/new ,或在 .htaccess 內寫上:
) H# _( c( ^+ D% ]: l' T1 \1 dRedirect permanent /old http://url/new+ s/ E7 w9 F- S7 j7 \+ J
當用戶要求 /old 時,伺服器便叫瀏覽器把其永遠重新導向至 http://url/new6 |$ \- ]% V. c$ @% @4 n  x7 `( O4 A4 `

2 T9 K% Z5 A6 m6. 防止列出目綠內的檔案
! |5 F( B7 q5 d- R/ }.htaccess 內寫上:$ b7 s4 m. \+ h" M
Option -Indexes
! E' V5 j* G! S7 y" S% ?- L這便不能列出檔案目錄了# k( O# i% g0 W& e+ }3 p
.htaccess 內寫上:8 Z( A1 z& l0 g. J' b7 c& E
IndexIgnore *.zip *.txt
& K9 v; A/ Q4 H( ^這便不列出檔案目錄內的 .zip 與 .txt 檔了
2 E+ c4 w4 G1 J: A; d, v! H8 d% {% i* s
註: .htaccess 的大部分內容 (如:密碼保護) 可以寫回 httpd.conf 相應的目錄設定內( <Directory> )

TOP

首先在你要保護的目錄下建立一個名為.htaccess的檔案,內容大致如下: $ n; B2 P- K2 n7 `- C- o

! l) ]: O6 T' {! a# I- H7 X# 隨便取個名字吧,它會出現在瀏覽器的蹦出視窗中。
! M( I1 N" y* K( P! I/ ZAuthName 阿達的祕密基地 1 k# V7 ^3 [0 b! L1 M& y
# 編碼方式,目前只支援Basic一種而已。
$ c! L! x5 G& |4 u3 I8 `0 f+ L2 oAuthType Basic 0 |  \( m* G4 y$ d
# 密碼檔的絕對路徑,可用htpasswd指令建立。
% `9 Y# t) h3 v! E! R( K. B  uAuthUserFile /home/.../filename
) T* I' {8 J) k# 若下面有指定 require group,則需要group檔的絕對路徑。 . U  G9 W' Z! {) K7 Q( N3 J3 b) u
AuthGroupFile /home/.../filename
0 {4 x, k; Y' a" w1 P" f7 n3 `) O$ G( e, b
<Limit GET POST> # l7 O4 }8 t! E- G! Z7 I5 k
require user user1 user2 ...
% n( d9 S* l, n4 u4 F) c% {require group group1 group2 ... + _1 [# Z" L4 P# B
</Limit> & o" S! J+ k/ s! A; ~2 O
$ Y) p( g" @4 K5 \" O/ N1 u

  s' j4 |. T. u" p/ u( p( f它的密碼認證方式有二種,一種是指定users,也就是只有指定的username才有資格進入這個受保護的目錄。另一種是則指定group,凡屬於指定的group的users才有資格進入這個受保護的目錄,而group中到底有哪些users是記錄在AuthGroupFile中所指定的檔案,users的密碼檔則是指定在AuthUserFile中。且讓我們來看看這兩個檔的格式: 1 p2 y# C$ G" @1 v% |

# T7 q2 e" W0 t- ~' s6 Xgroup檔:
' r7 y/ }- M" D+ Agroup1:user1 user2 ... 6 D; V  @# k) y  i& s+ g
group2:user3 user4 ...
3 w. l9 p" P( A) X% a... ( K( a9 j- u; Z; m2 l

  X7 j9 w& D/ m* o  |% [passwd檔:
9 F/ a8 ~. N- `0 E8 `user1:password
$ ~3 U+ o- b# t+ \user2:password 8 U& W- F! ]  i. o) \
... $ _1 N& a/ ]4 K0 R

0 n- S  E( F! ~' m  |& G# M% l密碼檔裡的密碼是編碼過的,你可以使用htpasswd指令來建立密碼檔或新增users。而且由於密碼是用crypt函數編碼的,所以你也可以自己寫個CGI程式來新增users。 % ?( c2 |( K& k) {
. `9 H8 D1 a) u6 t; h2 P' H) t
另外還有個安全問題要提醒你:密碼檔不要放在www文件的樹目錄中,最好是放在www目錄外面,以免密碼檔被不法之徒偷去猜密碼。 & s+ M  s, l; @4 T

$ I, }* b3 a7 H- I( ^: K  IOK!!就這麼簡單,現在你可以試試看成功了沒...

TOP

發新話題