.htaccess檔教學

htaccess教程

第1部分 - 簡介

<概述>

在本教程中,你會發現許多有關.htaccess文件,它的使用方法,及如何利用它來改善您的網站。 雖然.htaccess只是一個文件,它可以改變服務器上的設置,並允許你做許多不同的事情,最常見的用法,是有自己的自定義404錯誤頁面。.htaccess不難用,只有幾個簡單的指令。

<我能做些什麼呢?>

您可能想知道的.htaccess可以做什麼,或你可能已經讀過有關它的一些用途,但沒有意識到,實際上你可以用它做多少事情。.htaccess可以做的事,範圍相當大,其中包括:文件夾密碼保護,用戶自動重定向,自定義錯誤頁面,改變你的文件副檔名,禁止某些IP地址的用戶,只允許某些IP地址的用戶,停止目錄表和使用一個不同的檔案作為目錄的索引文件。

<創建一個.htaccess文件>

創建一個.htaccess文件可能會導致你的幾個問題。寫文件很容易 - 你只需要輸入相應的代碼到文本編輯器(如記事本)。您可能會遇到的問題是「保存文件」。 因為.htaccess是一個特別的文件名稱(文件其實沒有名字,只有一個8個字母的副檔名),它可能不會被接受某些系統接受。大多數操作系統,你需要做的是保存文件,輸入名稱為:.htaccess,即可存檔。如果這不起作用,你會需要它命名為別的東西(例如htaccess.txt),然後把它上傳到伺服器上。一旦你上傳了文件,你可以使用FTP重新命名它,再將它改成.htaccess。

<自定義錯誤頁面>

.htaccess文件中的自定義錯誤頁面功能,可以讓你有自己的個人的錯誤頁面(例如,當一個文件未找到),而不是使用主機的錯誤頁或「沒有任何頁面」。這將使您的網站在萬一出現錯誤時,看起來更專業。您可以使用自定義錯誤頁面的任何錯誤,只要你知道到該錯誤的數值代碼並且在您的.htaccess文件中加入以下的代碼:

ErrorDocument 錯誤代碼 /自定錯誤頁面之檔名

以「404找不到頁面」這個錯誤為例子,如果我網站根目錄下的文件notfound.html是我想用來作為404錯誤的自定頁面,我會用:

ErrorDocument 404 /notfound.html

如果該文件不是在您網站的根目錄,而是在/errorpages這個目錄,你只需把它的路徑附加上去,例如:

ErrorDocument 500 /errorpages/500.html

下方都是一些最常見的錯誤代碼:

401 - 需要授權
400 - 錯誤的請求
403 - 禁止訪問
500 - 內部服務器錯誤
404 - 錯誤的頁面,找不到頁面

然後,所有你需要做的是:創建一個文件用來向您的客戶說明錯誤的發生,並把這個文件跟.htaccess文件一起用FTP上傳。

第2部分 - htaccess的命令

<概述>

在上個部分,我向您介紹.htaccess以及它的一些有用的功能。現在我會告訴你如何使用.htaccess文件來實現這些。

<停止顯示目錄的索引>

有時,由於某種原因或其他原因,您網站的某些目錄下沒有索引文件。當然,這將意味著,將其目錄下的所有文件的完整列表將顯示。這可能是一個為您的網站的安全風險。要處理這個問題,你可以在.htaccess文件下命令阻止目錄列表的顯示:

Options -Indexes

<拒絕/允許特定的IP地址>

在某些情況下,您可能希望只允許特定的IP地址的人訪問您的網站(例如,只允許使用特定ISP的人進入某個目錄),或者你可能想,禁止特定IP地址(例如,留言板來了搞破壞的成員)。當然,在網際網路上的大多數人現在有一個動態的IP地址,所以這個方法只在一定的範圍內起作用。您可以拒絕一個IP地址:

deny from 000.000.000.000

其中000.000.000.000是IP地址。如果你只指定1或2組數字,你就會阻止整個範圍的IP。

您可以允許使用的IP地址:

allow from 000.000.000.000

其中000.000.000.000是IP地址。如果你只指定1或2組數字,你就會容許整個範圍的IP。

如果你想每個人都拒絕訪問目錄,你可以使用:

deny from all

但是這仍然會允許使用目錄中程式碼指令稿(.php)來存取文件。

<替代的索引文件>

你可能不想一直使用index.htm或index.html作為索引文件。例如,如果您使用的是PHP文件,在您的網站,你可能想使用index.php來做為某個目錄的索引文件。甚至你想使用foo.html作為索引文件。你需要輸入一個替代的索引文件名的列表。伺服器將從左至右檢查這個列表,看看每個文件是否存在,如果他們全部都不存在,它會顯示目錄的索引(當然,除非你已經關閉了)。範列如下:

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

<重新定向>

最有用的.htaccess文件的功能之一是請求重新定向到不同的文件,無論是在同一服務器上,或在一個完全不同的網站。如果你改變了一個文件的名稱,但想允許用戶可以用舊的檔名找到該文件時,這個功能就很管用。另一個應用是重定向到一個長URL。例如,常見的短網址功能,也可以用這個方法做出來。下面是一個例子,用來作出短網址功能。

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

<重新定向於用目錄>

您還可以使用.htaccess文件重定向整個網站的目錄,如果你的網站有一個目錄叫olddirectory,而你已經建了一個新的資料夾於http://www.newsite.com/newdirectory。你可以用下方的指令:

Redirect /olddirectory http://www.newsite.com/newdirectory

然後,要求任何在資料夾/o​​lddirectory之下的檔案,都將會重定向到新的網站,且瀏覽器上的URL會被修改。例如,如果有人鍵入:

http://www.youroldsite.com/olddirecotry/oldfiles/images/image.gif

他們將被重定向到:

http://www.newsite.com/newdirectory/oldfiles/images/image.gif

第3部分 - 密碼保護

<概述>

雖然有很多用途.htaccess文件,到目前為止,最常見的,也可能是最有用的,是能夠以可靠的密碼保護網站的目錄。

<.htaccess文件>

使用.htaccess文件來添加密碼保護的目錄有兩個步驟。第一步驟是在你想保護的目錄中添加相對應的.htaccess文件。這個目錄下所有的檔案都將是被密碼保護的。

AuthName "區域名稱" 
AuthType Basic 
AuthUserFile /full/path/to/.htpasswd 
Require valid-user

在上述的範例中,您需要取代一些文字。「區塊名稱」取代為您網站的某些部分,例如「會員區」。full/path/to/要改成.htpasswd的伺服器完整路徑。如果你不知道完整的路徑,請提交服務單。

<.htpasswd文件>

密碼保護目錄這個功能比任何其他的.htaccess的功能需要多做一點工作,因為你還必須創建一個文件包含被允許訪問該網站目錄的用戶名和密碼。這些應被放置在一個應該被稱為.htpasswd文件的文件裡。.htpasswd文件像.htaccess文件,使用一個8個字母組成的副檔名。這可以放置在您網站的任何地方(密碼是加密的),但最好是存儲Web根目錄以外的地方,所以.htpasswd文件是不可能從網絡上訪問的。

輸入用戶名和密碼

一旦你創建了你的.htpasswd文件,你必須輸入用戶名和密碼訪問該網站。格式如下:

username:password

其中,password是加密過的密碼格式,一般使用sha演算法來加密。您可以使用某些網站的服務來生成正確的格式,例如( http://www.kxs.net/support/htaccess_pw.html)這將允許你輸入用戶名和密碼,以正確的格式輸出。

總結

htaccess是網站管理員可以使用的最有用的文件之一。它也有多種不同的用途,這可以節省時間和提高安全性。

  • 13 Utenti hanno trovato utile questa risposta
Hai trovato utile questa risposta?

Articoli Correlati

html 轉頁的語法

請將下列的代碼,擺到 index.html...

虛擬主機,該如何修改php的參數?

問: 如果我是虛擬主機用戶,該如何修改php的參數?答: 請參考我們的blog 文章:...

我該如何追蹤線路節點?

Q: 我該如何追蹤線路節點呢?   A: windows用戶,請開啟電腦內的命令提示字元, 請執行 tracert ip (或是加上網址, 比如說 tracert...

如何透過.htaccess檔來做限制密碼登入及IP白名單

123456789101112 AuthType Basic AuthName "Secure site" AuthUserFile...

請問虛擬主機的log檔在哪呢?

Q: 請問虛擬主機的log檔在哪呢?A: access log 部份, 在ftp 的根目錄access_log 資料夾內。      error...