Apache服務器的.htaccess是一個非常強大的分布式配置文件,學會使用.htaccess,對虛擬主機用戶來說,可以實現眾多的功能。這裡有一篇很容易讓人理解的.htaccess介紹,作為入門文章非常的適合。
本文簡單介紹了關於.htaccess文件及其功能的知識,可以用來優化您的網站(SEO優化等)。.htaccess是Apache的一個配置文件,用於在不重啟服務器的情況下修改部分服務器設置參數。例如,最常用的功能是創建自定義的“404 錯誤”頁面。.htaccess 使用起來也相當簡單,只需要在網站根目錄放置一個.htaccess的文件,添加幾行代碼就可以了。更加深入的學習請參見筆者寫的另一篇文章《.htaccess rewrite 規則詳細說明》
- 我的主機是否支持.htaccess?
理論上講,所有Linux&Unxi下的Apache服務器均支持.htaccess設置。不過,最終決定權在於提供服務的空間商,你可以咨詢空間商客服,或者自己測試一下,方法很簡單,在網站根目錄下的.htaccess文件中寫入:
//將所有請求都重定向到指定域名
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^.*$
RewriteRule ^.*$ http://www.cnphp.info [R=301,L]
如果重定向成功,恭喜,你的主機支持.htaccess設置
- 使用.htaccess能做什麼?
可以做很多事情啦,包括:
- 文件夾密碼保護
- 用戶自動重定向
- 自定義錯誤頁面
- 改變你的文件擴展名
- 封禁特定IP地址的用戶
- 只允許特定IP地址的用戶
- 禁止目錄列表
- 使用其他文件作為默認的index文件
- 如何自定義錯誤頁面?
首先,我想向大家介紹一下如何在.htaccess中設置自定義錯誤頁面,做為一個入門的例子,相當簡單。
ErrorDocument HTTP響應代碼 /file.html
如果用戶訪問了一個不存在的頁面,那麼我可以把他轉到一個頁面,告訴他,這個頁面不存在,這樣作非常友好;同時,搜索引擎也很喜歡,對SEO很有幫助哦!
ErrorDocument 404 /nofound.html
將/notfound.html 編輯好放在根目錄下就可以了,自己動手做好後試試看效果?
常用的響應代碼有:
- 401 – Authorization Required 需要驗證
- 400 – Bad request 錯誤請求
- 403 – Forbidden 禁止
- 500 – Internal Server Error 內部服務器錯誤
- 404 – Wrong page 找不到頁面
- 禁止目錄列表
如果目錄下沒有index(如:index.htm)文件,Apache默認情況下會顯示該目錄下所有文件的列表,這會給你的網站留下安全隱患。為避免這種情況出現,要麼把所有目錄都加上index文件(如果目錄多,就很麻煩了)。可以在.htaccess使用如下指令,以阻止目錄列表的顯示,很方便吧^_^:
Options -Indexes
- 阻止/允許特定的IP地址
網站有時難免會遭到一些來意不明的用戶侵擾,防范這些用戶的最好辦法之一就是禁止某些IP地址訪問網站;或者,基於一些特殊原因,你可能只想允許某些特定IP的用戶可以訪問你的網站(例如:只允許使用特定IP用戶進入某個目錄),或者想封禁某些特定的IP地址(例如:將未經IP授權的用戶隔離於你的信息版面外)。當然,這只在你知道你想攔截的IP地址時才有用,然而現在網上的大多數用戶都使用動態IP地址,所以這並不是限制使用的常用方法。
在.htaccess中可以使用如下指令禁止一個IP地址訪問:
deny from 000.000.000.000
這裡的000.000.000.000是被禁止的IP地址,如果你只指明了其中的幾個,則可以禁止整個網段的地址訪問。如你輸入”114.11.128.” ,則將禁止114.11.128.0~114.11.128.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
- 重定向
.htaccess最有用的功能之一就是將請求重定向到同站內或站外的不同文檔。這在你改變了一個文件名稱,但仍然想讓用戶用舊地址訪問到它時,變的極為有用。另一個應用(我發現是很有用的)是重定向到一個長URL,例如在我的時事通訊中,我可以使用一個很簡短的URL來指向我的會員鏈接。以下是一個重定向文件的例子:
Redirect /location/from/root/file.ext
http://www.othersite.com/new/file/location.xyz上述例子中,訪問在root目錄下的名為oldfile.html可以鍵入:
/oldfile.html
訪問一個舊次級目錄中的文件可以鍵入:
/old/oldfile.html
你也可以使用.htaccess重定向整個網站的目錄。假如你的網站上有一個名為olddirectory的目錄,並且你已經在一個新網站 http://www.newsite.com/newdirectory/上建立了與上相同的文檔,你可以將舊目錄下所有的文件做一次重定向而不必一一聲明:
Redirect /olddirectory http://www.newsite.com/newdirectory
這樣,任何指向到站點中/olddirectory目錄的請求都將被重新指向新的站點,包括附加的額外URL信息。例如有人鍵入:
http://www.youroldsite.com/olddirecotry/oldfiles/images/image.gif
請求將被重定向到:
http://www.newsite.com/newdirectory/oldfiles/images/image.gif
如果正確使用,此功能將極其強大。
- 使用.htaccess進行密碼保護
利用.htaccess將一個目錄加上密碼保護分兩個步驟。第一步是在你的.htaccess文件中插入如下代碼,再將.htaccess文檔放進你要保護的目錄下:
AuthName “Section Name” #用戶名
AuthType Basic #認證方式
AuthUserFile /full/path/to/.htpasswd #密碼文件
Require valid-user
- 使用.htpasswd存放用戶名和密碼
目錄的密碼保護比.htaccess的其他功能要麻煩些,因為你必須同時創建一個包含用戶名和密碼的文檔,用於訪問你的網站,相關信息(默認)位於一個名為.htpasswd的文檔裡。像.htaccess一樣,.htpasswd也是一個沒有文件名且具有8位擴展名的文檔,可以放置在你網站裡的任何地方(此時密碼應加密),但建議你將其保存在網站Web根目錄外,這樣通過網絡就無法訪問到它了。
- 設定用戶名和密碼
創建.htpasswd的方法有兩種。
一種使用命令行工具:htpasswd,對於Linux系統一般放在/usr/bin下,Windows下放在Apache的Bin目錄下(htpasswd.exe),命令如下(我只列出常用的幾個選項):
htpasswd -c passwordfile username
htpasswd -b passwordfile username password
htpasswd -D passwordfile username
-c 創建一個密碼文件,並增加一個用戶
-b 增加一個用戶
-D 刪除一個用戶
另一種方式是手動創建:創建好.htpasswd文檔後(可以通過文字編輯器創建),下一步是輸入用於訪問網站的用戶名和密碼,應為:
username:password
“password”的位置應該是加密過的密碼。提供一個很不錯的username/password加密服務網站KxS,可以輸入用戶名及密碼,然後生成正確格式的密碼。
對於多用戶,你只需要在.htpasswd文檔中新增同樣格式的一行即可。另外還有一些免費的腳本程序可以方便地管理.htpasswd文檔,可以自動新增/移除用戶等。
- 如何訪問有密碼保護的網站
當你試圖訪問被.htaccess密碼保護的目錄時,你的浏覽器會彈出標准的username/password對話窗口。如果你不喜歡這種方式,有些腳本程序可以允許你在頁面內嵌入username/password輸入框來進行認證,你也可以在浏覽器的URL框內以以下方式輸入用戶名和密碼(未加密的):http://username:[email protected]/directory/