天天看點

Apache伺服器的.htaccess

.htaccess是Apache伺服器的一個非常強大的分布式配置檔案。

正确的了解和使用.htaccess檔案,可以幫助我們優化自己的伺服器或者虛拟主機。

比如可以利用.htaccess檔案建立自定義的“404 error”頁面,更改很多伺服器的配置。而我們所需要做的,僅僅是在這個文本文檔中添加幾條簡單的指令而已。

Unix或Linux系統,或任何版本的Apache Web服務,都是支援.htaccess的,但是有的主機服務商可能不允許你自定義自己的.htaccess檔案。國外目前主流的虛拟主機提供商,幾乎全部都支援自定義功能。

啟用.htaccess,需要修改httpd.conf,啟用AllowOverride,并可以用AllowOverride限制特定指令的使用。

如果需要使用.htaccess以外的其他檔案名,可以用AccessFileName指令來改變。例如,需要使用.config ,則可以在伺服器配置檔案中按以下方法配置:

AccessFileName .config

籠統地來說,.htaccess可以幫我們實作包括:檔案夾密碼保護、使用者自動重定向、自定義錯誤頁面、改變你的檔案擴充名、封禁特定IP位址的使用者、隻允許特定IP位址的使用者、禁止目錄清單,以及使用其他檔案作為index檔案等一些功能。

●建立一個.htaccess文檔

.htaccess是一個古怪的檔案名(從Win的角度來說,它沒有檔案名,隻有一個由8個字母組成的擴充名,不過實際上它是linux下的命名,而很多linux下的東西,我們向來都會認為很古怪的),在Win系統中是不可以直接通過“建立”檔案來建立的,不過我們可以利用cmd中的copy來實作,比如copy sample.txt .htaccess。也可以先建立一個htaccess.txt,然後Ftp到伺服器,通過FTP來修改檔案名。

●自定義錯誤頁

.htaccess的一個應用是自定義錯誤頁面,這将使你可以 擁有自己的、個性化的錯誤頁面(例如找不到檔案時),而不是你的服務商提供的錯誤頁或沒有任何頁面。這會讓你的網站在出錯的時候看上去更專業。你還可以利 用腳本程式在發生錯誤的時候通知你(例如當找不到頁面的時候自動Email給你)。

你所知道的任何頁面錯誤代碼(像404找不到頁面),都可以通過在.htaccess檔案裡加入下面的文字将其變成自定義頁面:

ErrorDocument errornumber /file.html

舉例來說,如果我的根目錄下有一個notfound.html檔案,我想使用它作為404 error的頁面:

ErrorDocument 404 /notfound.html

如果檔案不在網站的根目錄下,你隻需要把路徑設定為:

ErrorDocument 500 /errorpages/500.html

以下是一些最常用的錯誤:

401 - Authorization Required 需要驗證

400 - Bad request 錯誤請求

403 - Forbidden 禁止

500 - Internal Server Error 内部伺服器錯誤

404 - Wrong page 找不到頁面

接下來,你要做的隻是建立一個錯誤發生時顯示的檔案,然後把它們和.htaccess一起上傳。

●.htaccess指令

▼禁止顯示目錄清單

有些時候,由于某種原因,你的目錄裡沒有index檔案,這意味着當有人在浏覽器位址欄鍵入了該目錄的路徑,該目錄下所有的檔案都會顯示出來,這會給你的網站留下安全隐患。

為避免這種情況(而不必建立一堆的新index檔案),你可以在你的.htaccess文檔中鍵入以下指令,用以阻止

目錄清單的顯示:

Options -Indexes

▼阻止/允許特定的IP位址

某些情況下,你可能隻想允許某些特定IP的使用者可以通路你的網站(例如:隻允許使用特定ISP的使用者進入某個目 錄),或者想封禁某些特定的IP位址(例如:将低級使用者隔離于你的資訊版面外)。當然,這隻在你知道你想攔截的IP位址時才有用,然而現在網上的大多數用 戶都使用動态IP位址,是以這并不是限制使用的常用方法。

你可以使用以下指令封禁一個IP位址:

deny from 000.000.000.000

這裡的000.000.000.000是被封禁的IP位址,如果你隻指明了其中的幾個,則可以封禁整個網段的位址。如你輸入210.10.56.,則将封禁210.10.56.0~210.10.56.255的所有IP位址。

你可以使用以下指令允許一個IP位址通路網站:

allow from 000.000.000.000

被允許的IP位址則為000.000.000.000,你可以象封禁IP位址一樣允許整個網段。

如果你想阻止所有人通路該目錄,則可以使用:

deny from all

不過這并不影響腳本程式使用這個目錄下的文檔。

▼替換index檔案

也許你不想一直使用index.htm或index.html作為目錄的索引檔案。舉例來說,如果你的站點使用PHP 檔案,你可能會想使用 index.php來作為該目錄的索引文檔。當然也不必局限于“index”文檔,如果你願意,使用.htaccess你甚至能夠設定 foofoo.balh來作為你的索引文檔!

這些互為替換的索引檔案可以排成一個清單,伺服器會從左至右進行尋找,檢查哪個文檔在真實的目錄中存在。如果一個也找不到,它将會把目錄清單顯示出來(除非你已經關閉了顯示目錄檔案清單)。

DirectoryIndex index.php index.php3 messagebrd.pl index.html index.htm

▼重定向(rewrite)

.htaccess 最有用的功能之一就是将請求重定向到同站内或站外的不同文檔。這在你改變了一個檔案名稱,但仍然想讓使用者用舊位址通路到它時,變的極為有用。另一個應用(我發現的很有用的)是重定向到一個長URL,例如在我的時事通訊中,我可以使用一個很簡短的URL來指向我的會員連結。以下是一個重定向檔案的例子:

Redirect /location/from/root/file.ext http://minidx.com/new/file/location.xyz

上述例子中,通路在root目錄下的名為oldfile.html可以鍵入:

/oldfile.html

通路一個舊次級目錄中的檔案可以鍵入:

/old/oldfile.html

你也可以使用.htaccess重定向整個網站的目錄。假如你的網站上有一個名為olddirectory的目錄,并且你已經在一個新網站http://minidx.com/newdirectory/上建立了與上相同的文檔,你可以将舊目錄下所有的檔案做一次重定向而不必一一聲明:

Redirect /olddirectory http://minidx.com/newdirectory

這樣,任何指向到站點中/olddirectory目錄的請求都将被重新指向新的站點,包括附加的額外URL資訊。例如有人鍵入:

http://minidx.com/olddirecotry/oldfiles/images/image.gif

請求将被重定向到:

http://minidx.com/newdirectory/oldfiles/images/image.gif

如果正确使用,此功能将極其強大。

●密碼保護

盡管有各種各樣的.htaccess用法,但至今最流行的也可能是最有用的做法是将其用于網站目錄可靠的密碼保護。盡管JavaScript等也能做到,但隻有.htaccess具有完美的安全性(即通路者必須知曉密碼才可以通路目錄,并且絕無“後門”可走)。

利用.htaccess将一個目錄加上密碼保護分兩個步驟。

第一步是在你的.htaccess文檔裡加上适當的幾行代碼,再将.htaccess文檔放進你要保護的目錄下:

AuthName “Section Name”

AuthType Basic

AuthUserFile /full/path/to/.htpasswd

Require valid-user

你可能需要根據你的網站情況修改一下上述内容中的一些部分,如用被保護部分的名字”Members Area”,替換掉“Section Name”。

/full/parth/to/.htpasswd則應該替換為指向.htpasswd檔案(後面詳述該文檔)的完整伺服器路徑。如果你不知道你網站空間的完整路徑,請詢問一下你的系統管理者。

密碼保護的.htpasswd檔案

目 錄的密碼保護比.htaccess的其他功能要麻煩些,因為你必須同時建立一個包含使用者名和密碼的文檔,用于通路你的網站,相關資訊(預設)位于一個名 為.htpasswd的文檔裡。像.htaccess一樣,.htpasswd也是一個沒有檔案名且具有8位擴充名的文檔,可以放置在你網站裡的任何地方 (此時密碼應加密),但建議你将其儲存在網站Web根目錄外,這樣通過網絡就無法通路到它了。

建立好.htpasswd文檔後(可以通過文字編輯器建立),下一步是輸入用于通路網站的使用者名和密碼,應為:

username:password

“password” 的位置應該是加密過的密碼。你可以通過幾種方法來得到加密過的密碼:一是使用一個網上提供的permade腳本或自己寫一個;另一個很不錯的 username/password加密服務是通過KxS網站,這裡允許你輸入使用者名及密碼,然後生成正确格式的密碼。對于多使用者,你隻需要在. htpasswd文檔中新增同樣格式的一行即可。另外還有一些免費的腳本程式可以友善地管理.htpasswd文檔,可以自動新增/移除使用者等。

當 你試圖通路被.htaccess密碼保護的目錄時,你的浏覽器會彈出标準的username/password對話視窗。如果你不喜歡這種方式,有些腳本 程式可以允許你在頁面内嵌入username/password輸入框來進行認證,你也可以在浏覽器的URL框内以以下方式輸入使用者名和密碼(未加密 的):

http://username:[email protected]/directory/

比較常用的基本上就是這些了,如果想更加具體的了解.htaccess的使用,那可以參照Appache的doc中相關的文檔。