發新話題
打印

.htaccess 語法解析

.htaccess 語法解析

.htaccess 簡介
.htaccess 是一個文字檔,你可以用任何一種文字編輯器去編輯,例如 notepad。

或者你會對 .htaccess 這個名字有點困惑,其實 .htaccess 是一個完全的檔案名,不是 filaname.htaccess 或者甚麼的(當然也有管理員故意把它設定成其他名字,但一般都是用 .htaccess 的)。

為何是 .htaccess?因為所有以「.」開頭的檔名在 *nix 系統中也是有屬性隱藏的,平常列出資料夾時不會出現,所以保安會好一點。

你可能會問:「MS Windows 要我一定給它一個名字,如何把它存檔成為 .htaccess?」
其實方法有兩個:

第一個是到 ms-dos 的視窗中,按 ren filename.xxx .htaccess 就可以了。
第二個是在上傳到伺服器時才改名做 .htaccess。
而 .htaccss 內設定的格式是一行一個指令,如果你的 notepad 設定了自動換行的話,請關上它,這樣會比較安全。

有一點要注意, .htaccess 是 apache 的產物,不是 IIS 的。IIS 伺服器不支援它,也就是說你不能以簡單地上傳一個 ASCII 檔去設定在 IIS 伺服器上的 http 服務。

在上載 .htaccess 時,必需使用 ASCII 模式!你或許還要 chmod 它到 644(RW_R__R_)。

每一個放了 .htaccess 的目錄和它的子目錄都會被 .htaccess 影響。如果我在 /abc/ 放了一個 .htaccess,那麼 /abc/ 和 /abc/def/ 內所有 file 都會被它影響,但 /index.html 不會被它影響←← 這一點是很重要的。


--------------------------------------------------------------------------------

密碼保護

這是最常見 .htaccess 被使用的功能之一,資料夾密碼保護。

這種方法可以使沒有授權的瀏覽者不能進入你所設定的限制區域,使用了 Javacript 設的密碼太簡單了,一下字就會被破解,而使用 .htaccess 系統就比使用 CGI 程式保護會員專頁將更為有效、更安全,更重要的是使用 .htaccess 方式去設定不需要編寫程式的技能。

首先,你要開啟一般文字編輯工具,做出一個名叫 .htpasswd 的檔名,當然有可能是其他,但一般伺服器都會設定 .htpasswd 是不能經由「http」讀到的。檔案中的的每一句代表一個使用者,使用者名稱以及加密了的密碼是以冒號(分隔。而密碼必須經過加密才可以使用。

加密的方法是一般密碼使用的 crypt,如果你不知如何加密,請到以下的網頁:

UHome:http://www.euronet.nl/~arnow/htpasswd/

註:Win32 版本的 apache 好像不支援用了 crypt 加密法的密碼檔,只支援 SHA1 和 MD5 的。如果你是使用 apahce for win32 版本,請使用 Crogram FilesApache GroupApachebinhtpasswd.exe 做出以 MD5 加密的密碼檔!

再在 .htaccess 中,加上以下句子:

AuthName MemberPage
AuthType Basic
AuthUserFile /absolute/path/.htpasswd
require valid-user

第一句的 AuthName 就是當 browser 得知要密碼時所出現的句字,你可以自行改動 MemberPage。

第二句的 AuthType Basic 就千萬不要去改。

第三句的 AuthUserFile 就是設定所使用的 .htpasswd 檔,要留意它好像必需是在伺服器上的絕對路徑。請留意,這不是 URL 的位置、也不一定是在 ftp 中看到的位置,就算是由 CGI 自行測到的路徑也未必準確,請細看伺服器上的說明 (例如在 virtualave.net,URL 是 /.htpasswd ftp 看到的是 /public_html/.htpasswd,CGI 測到 /home/public_html/.htpasswd,但是事實上你要設定路徑為 /data1/virtualave.net/USERNAME/public_html/.htpasswd)。為了安全理由,不建議把 .htpasswd 放到可以用 http 去到的目錄。

最後的 require 就是命令伺服器誰可以進入,require valid-user 就是指只要是 .htpasswd 中的任何一人就可了;你也可以指定在名單上只有某人可以通過,require user username 或 require user username1 username2 username3;也可以指定是某組人才可以,require group groupname。

而設定組的方法是再做一個叫 .htgroup 的文字檔,內容如下:

groupname1: username1 username2 username3
groupname2: username1 username3 username4

再在 .htaccess 中加多一句 AuthGroupFile /absolute/path/.htgroup 和 .htpasswd 的方法一樣,我不再說了。

以 ASCII 模式上傳所有檔案後,在那個資料夾中所有檔案都會被保護。而再進一步,我們更可以設定個別設定只有某個檔案會密碼,不同檔案要不同的密碼,但是我會晚一點才說。


--------------------------------------------------------------------------------

自設錯誤報告文件

想做到好像 www.microsoft.com 一樣, 找不到文件不只是幾句白底黑字,也不是 IE 本身那個有 bug 的「找不到網頁」,而是另一頁 HTML 文件嗎?

方法很簡單,首先寫一頁說找不到文件的 HTML,再用 notepad 打開您的 .htaccess。在最後加上一句:

ErrorDocument 404 404.html

404.html 是錯誤檔案路經,即所顯示的檔案;404 是錯誤碼。以下就是一般會見到的錯誤碼和所代表的錯誤原因:

401 => Authorization failed 授權失敗;即是錯誤 password。
403 => Access denied 存取違規;即是你不可以讀取這個檔案。
404 => File not found 找不到檔案。
500 => Internal Server Error 伺服器內部錯誤;可能是 http 伺服器本身是問題,也可能是 CGI 出錯。

也有以下兩類做法:

ErrorDocument 404 "找不到"
ErrorDocument 500 http://www.xxx.com/xxx

PS. 如果所用的錯誤文件是一個 CGI 檔,就會有一點關於那個錯誤的資科放到環境變數內給 CGI 讀取。


--------------------------------------------------------------------------------

自設首頁檔案

這個可以算是最簡單的一個設定了:

DirectoryIndex index.html index.htm index.cgi

很簡單,當你的網址是一個目錄,沒有注明檔名時 (如: http://www.xxx.com/) 它會顯示 index.html。如果沒有這個檔案,就找下一個檔案。如果沒有任可一個名單上的檔案,就會依設定列出目錄內的檔名。


--------------------------------------------------------------------------------

禁止讀取檔案

如果你的 CGI 會把秘密的內容(例如:密碼)存到一個檔案,那麼別人只要知道這個檔案的位置,就可以很簡單的看到一切。不想這樣嗎?你可以完全不改變其他設定,不用把那個檔案移到其他地方,只需在 .htaccess 加幾句就可以了:


order allow,deny
deny from all


而 Apache 1.3 以後的版本,我們更可以用支援 regular expression 的 filesmatch:


order allow,deny
deny from all


其實 files 也可用 regular expression 的,但要加一個 ~ 在前(例: )。 files 和 filesmatch 的意思就是,內裏被包著的幾句只會對付合要求的部份檔案生效。

接著我就說有關中間的文字→order deny, allow,就是先找出禁止(deny) 的,才去找例外許可的 (allow)。如果把它們反轉,就是 order allow, deny 就是,就是先找出許可(allow) 的,才去找禁止的 (deny)。之後的 deny form all 就是說,全部 IP 來的都不可以。相對地 allow form all 也就是全部都可以。而你更可以這樣做:

order allow,deny
allow form all
deny form 123.456   // 所有以 123.456 開始的 IP,如 123.456.1.1

除了設定 IP 外,您也可以設定 hostname(例如: xxx.com)。

Files 和 Filesmatch 的用途很多,你不但可以設定 deny,更可以設定 個別檔案的密碼,如:


require user abc


require user def



--------------------------------------------------------------------------------

重新導向文件

就是重新導向文件。

Redirect /abc http://www.xxx.com/abcabc
Redirect permanent /def http://www.xxx.com/def

即是說,如果 browser 要求 http://_____/abc 它就會重新導向至 http://www.xxx.com/abcabc

而第二句又有甚麼不同呢?

答案就是 http 的狀能碼不同,parmanet (301) 是永遠的,代表 browser 下一次未必會再要求這檔案,而直接找另一個。除了 permanent 之外,還有 temp ( 301;和不寫一樣)、seeother(303) 和 gone(410)。

也有 RedirectMatch,不過它就支援 regular expression。


--------------------------------------------------------------------------------

防止列出目綠內的檔案

其實要做到這個目標可以不用 .htaccess,你只要自己寫一頁 index.html 放入去就可以了。但是,用 .htaccess 會方便很多,在 .htaccess 中加一句:

Option -Indexes

這樣做,伺服器就不會多事地把目錄內的檔名列出。如果你只不過是想不列出某幾個檔案,請用以下的設定:

IndexIgnore *.gif *.jpg

我想就算只識一點英文的人也會明白,就是在列出檔名時不理會(ignore) 後面的檔案。

PS. 如果設定了 IndexIgnore *,它就不會列出任何檔案,但是會有 HEADER 和 README 的內容,而它們是可以自設的。

本文摘自 http://www.niceclass.net/

TOP

原來這個檔案的功用這麼大
目前會去接觸這個檔案
似乎都是因為它礙事
遇到的問題是因為這個檔案造成
例:
網域是  abcd.com
子網域  book.abcd.com  正常應該這樣就可以連結
但有時因為  .htaccess 卻只能以 www.abcd.com/book 的網址才能連結
解決的方法是把.htaccess改成.htaccess2(其他名字)

看了站長詳盡的解說
.htaccess確實值得深入研究

這樣就可以限制網頁的瀏覽權限了
弱弱的問一聲
前面提到的密碼保護
是針對一個網頁還是一整個資料夾裡的網頁

TOP

哈哈...不是我寫的啦...轉摘的...

通常都是針對某個資料夾做保護...
針對某頁...應該要在頁面裡做吧...
就不會用.htaccess了,我的做法是這樣...

TOP

發新話題