從本指南中,你將可以學習到有關.htaccess檔案及其功能的知識,並用以優化你的網站。儘管.htaccess只是一個文件,但它可以更改伺服器的設置,允許您做許多不同的事情,最受歡迎的功能是您可以創建自訂的「404 error」頁面。 .htaccess 並不難使用,歸根究底,它只是在一個text文件中加入幾個簡單的指令而已。
首先你要判斷主機支援它
這可能很難用簡單的答案來回答。許多主機支援.htaccess,但實際上並不會特別聲明,許多其他類型的主機有能力但並不允許他們的用戶使用. htaccess。一般來說,如果你的主機使用Unix或Linux系統,或任何版本的Apache網頁伺服器,理論上都是支援.htaccess的,儘管你的主機服務商可能不允許你使用它。
判斷你的主機是否允許.htaccess,一個標誌很好的是它是否支援資料夾密碼保護。要達到此功能,主機服務商需要使用.htaccess(當然,少數情況下他們雖提供密碼保護功能,但卻並不允許你使用.htaccess)。如果你不確定自己的主機是否支援.htaccess,最好的方法是上傳你自己的.htaccess檔案看看是否有用,或直接傳送e-mail向你的主機服務商諮詢。
Apache系統中的.htaccess檔(或」分散式設定檔」提供了針對目錄變更設定的方法,即,在一個特定的文件目錄中放置一個包含一個或多個指令的文件,以作用於此目錄及其所有子目錄。
子目錄中的指令會覆寫更進階目錄或是主伺服器設定檔中的指令。
.htaccess必須以ASCII模式上傳,最好將其權限設為644。
.htaccess可以做大量的事情,包括:資料夾密碼保護、使用者自動重新導向、自訂錯誤頁面、改變你的檔案副檔名、封鎖特定IP位址的使用者、只允許特定IP位址的使用者、禁止目錄列表,以及使用其他文件作為index文件。
創建.htaccess檔案也許會為你帶來一些困難。寫文件很容易,你只需要在文字編緝(例如:寫字板)裡寫下適當的程式碼。真正困難的可能是檔案的保存,因為.htaccess是一個古怪的檔案名稱(它事實上沒有檔案名,只有一個由8個字母組成的副檔名),而在某些系統(如windows 3.1)中無法接受這樣的檔名。在大多數的作業系統中,你需要做的是將文件儲存成名為: “.htaccess” (包括引號)。如果這也不行,你需要將其先命名為其它名字(例如htaccess.txt),再將其上傳到伺服器上,之後直接使用FTP軟體來重命名。
警告
在使用.htaccess之前,我必須給你一些警告。雖然在伺服器上使用.htaccess絕對不太可能給你帶來任何麻煩(如果有些東西錯了,它只是沒效用罷了),但如果你使用Microsoft FrontPage Extensions,就必須特別小心。因為FrontPage Extensions本身使用了.htaccess,因此你不能編輯它並加入你自己的資訊。如果確實有這方面的需要(並不推薦,但可能),你應該先從伺服器上下載.htaccess文件(如果存在),之後在前面加上你的程式碼。
2|.httacces檔案的配置
我要介紹的.htaccess的第一個應用程式是自訂錯誤頁面,這將使你可以擁有自己的、個人化的錯誤頁面(例如找不到文件時),而不是你的服務商提供的錯誤頁或沒有任何頁面。這會讓你的網站在出錯的時候看起來更專業。你也可以利用腳本程式在發生錯誤的時候通知你(例如我使用Free Webmaster Help的PHP腳本程序,當你找不到頁面的時候自動e-mail給我)。
你所知道的任何頁面錯誤代碼(像404找不到頁面),都可以透過在.htaccess檔案裡加入下面的文字將其變成自訂頁面:
ErrorDocument errornumber /file.html
舉例來說,如果我的根目錄下有一個nofound.html文件,我想使用它作為404 error的頁面:
ErrorDocument 404 /notfound.html
如果檔案不在網站的根目錄下,你只需要把路徑設定為:
ErrorDocument 500 /errorpages/500.html
以下是一些最常用的錯誤:
常用的客戶端請求錯誤回傳代碼:
400 - Bad request 錯誤請求
401 Authorization Required需要驗證
403 Forbidden禁止
404 Not Found找不到頁面
405 Method Not Allowed
408 Request Timed Out
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type
常見的伺服器錯誤回傳代碼:
500 Internal Server Error內部伺服器錯誤
接下來,你要做的只是建立一個錯誤發生時顯示的文件,然後把它們和.htaccess一起上傳。
使用者可以利用.htaccess指定事先製作好的錯誤提醒頁。一般情況下,人們可以專門設立一個目錄,例如errors放置這些頁面。然後再.htaccess中,加入如下的指令:
ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/internalerror.html
一條指令一行。上述第一指令的意思是對於404,也就是沒有找到所需要的文檔的時候得顯示頁面為/errors目錄下的notfound.html頁面。不難看出文法格式為:
ErrorDocument 錯誤代碼/目錄名稱/檔案名稱.副檔名
如果所需要提示的資訊很少的話,不必特別製作頁面,直接在指令中使用HTML號了,例如下面這個範例:
ErrorDocument 401 “你沒有權限訪問該頁面,請放棄!”
有些時候,由於某種原因,你的目錄裡沒有index文件,這意味著當有人在瀏覽器地址欄鍵入了該目錄的路徑,該目錄下所有的文件都會顯示出來,這會給你的網站留下安全隱憂。
若要避免這種情況(而不必建立一堆的新index檔),你可以在你的.htaccess文件中鍵入以下指令,以阻止目錄清單的顯示: Options -Indexes
在某些情況下,你可能只想允許某些特定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
不過這並不影響腳本程式使用這個目錄下的文件。
改變預設的首頁文件
一般情況下缺省的首頁檔名有default、index等。不過,有些時候目錄中沒有預設文件,而是某個特定的文件名,例如在w3sky中是w3sky.PHP。在這種情況下,要使用者記住檔案名稱來存取很麻煩。在.htaccess中可以輕易的設定新的預設檔名:
DirectoryIndex 新的預設檔名
也可以列出多個,順序表明它們之間的優先級別,例如:
DirectoryIndex filename.html index.cgi index.pl default.htm
也許你不想一直使用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.w3sky.com/new/file/123.html
上述範例中,存取在root目錄下的名為oldfile.html可以鍵入:
/oldfile.html
存取一個舊次級目錄中的檔案可以鍵入:
/old/oldfile.html
你也可以使用.htaccess重定向整個網站的目錄。假如你的網站上有一個名為olddirectory的目錄,並且你已經在一個新網站http://www.w3sky.com/newdirectory/上建立了與上相同的文檔,你可以將舊目錄下所有的文件做一次重定向而不必一一聲明:
Redirect /olddirectory http://www.w3sky.com/newdirectory
這樣,任何指向到站點中/olddirectory目錄的請求都會重新指向新的站點,包括附加的額外URL資訊。例如有人鍵入:
請求將被重定向到:
如果正確使用,此功能將極其強大。
我們可能對網站進行重新規劃,將文件進行了遷移,或者更改了目錄。這時候,來自搜尋引擎或其他網站連結過來的訪問就可能出錯。在這種情況下,可以透過以下指令來完成舊的URL自動轉向到新的位址:
Redirect /舊目錄/舊文件名稱新文件的位址
或整個目錄的轉向:
Redirect 舊目錄新目錄
儘管有各種各樣的.htaccess用法,但至今最流行的也可能是最有用的做法是將其用於網站目錄可靠的密碼保護。雖然JavaScrip等也能做到,但只有.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檔案(後面詳述該文件)的完整伺服器路徑。如果你不知道你網站空間的完整路徑,請問你的系統管理員。
目錄的密碼保護比.htaccess的其他功能要麻煩些,因為你必須同時創建一個包含用戶名和密碼的文檔,用於訪問你的網站,相關信息(默認)位於一個名為.htpasswd的文檔裡。像.htaccess一樣,.htpasswd也是一個沒有文件名且具有8位擴展名的文檔,可以放置在你網站裡的任何地方(此時密碼應加密),但建議你將其保存在網站Web根目錄外,這樣透過網路就無法存取它了。 1516501417
在使用.htaccess來設定目錄的密碼保護時,它包含了密碼檔案的路徑。從安全考慮,有必要把.htaccess也保護起來,不讓別人看到其中的內容。雖然可以用其他方式做到這一點,例如文件的權限。不過,.htaccess本身也能做到,只要加入如下的指令:1516501417
order allow,deny
deny from all
要利用.htaccess對某個目錄下的文檔設定存取使用者和對應的密碼,首先要做的是產生一個.htpasswd的文本文檔,例如:
forge:y4E7Ec8e7EwV
這裡密碼經過加密,使用者可以自己找一些工具將密碼加密成.htaccess支援的編碼。該文件最好不要放在www目錄下,建議放在www根目錄文件之外,這樣比較安全些。
有了授權使用者文檔,可以在.htaccess中加入如下指令了:
AuthUserFile .htpasswd的伺服器目錄
AuthGroupFile /dev/null (需要授權存取的目錄)
AuthName EnterPassword
AuthType Basic (授權類型)
require user wsabstract (允許存取的用戶,如果希望表中所有用戶都允許,可以使用require valid-user)
註,括號部分為學習時候自己加上的註釋
拒絕來自某個IP的訪問
如果我不想某個政府部門訪問到我的站點的內容,那可以透過.htaccess中加入該部門的IP而將它們拒絕在外。
例如:
order allow,deny
deny from 210.10.56.32
deny from 219.5.45.
allow from all
第二行拒絕某個IP,第三行拒絕某個IP段,也就是219.5.45.0~219.2.45.255
想要拒絕所有人?用deny from all好了。不只用IP,也可以用網域來設定。
建立好.htpasswd文件後(可透過文字編輯器建立),下一步是輸入用於存取網站的使用者名稱和密碼,應為:
username:password
「password」的位置應該是加密過的密碼。你可以透過幾種方法來得到加密過的密碼:一是使用一個網路上提供的permade腳本或自己寫一個;另一個很不錯的username/password加密服務是透過KxS網站,這裡允許你輸入使用者名稱及密碼,然後產生正確格式的密碼。
對於多用戶,你只需要在.htpasswd文件中新增同樣格式的一行即可。另外還有一些免費的腳本程式可以方便地管理.htpasswd文檔,可以自動新增/移除使用者等。
當你試圖存取被.htaccess密碼保護的目錄時,你的瀏覽器會彈出標準的username/password對話視窗。如果你不喜歡這種方式,有些腳本程式可以允許你在頁面內嵌入username/password輸入框來進行認證,你也可以在瀏覽器的URL框內以以下方式輸入使用者名稱和密碼(未加密的):
http://username:password@ www.w3sky.com/directory/
如果不喜歡別人在他們的網頁上連接自己的圖片、文件的話,也可以透過htaccess的指令來做到。
所需要的指令如下:
RewriteEngine on
RewriteCond %{ HTTP_REFERER } !^$
RewriteCond %{ HTTP_REFERER } !^http://(www.)?w3sky.com/.*$ [NC]
RewriteRule .(gif &line;jpg)$ - [F]
如果覺得讓別人的頁面開個天窗不好看,那可以用一張圖片來代替:
RewriteEngine on
RewriteCond %{ HTTP_REFERER } !^$
RewriteCond %{ HTTP_REFERER } !^http://(www.)?w3sky.com/.*$ [NC]
RewriteRule .(gif &line;jpg)$ http://www.w3sky.com/取代圖片檔案名稱[R,L]
這種方法,就是把yourdomain.com的流量全部301轉向到www.yourdomain.com (或者反過來)。其實對於這種方法,國外有人認為對PageRank沒有幫助。我覺得是因為他們看到Google管理員工具中有一個首選網域工具,可以指定Google的爬蟲把www.yourdomain.com或yourdomain.com作為抓取和排名的首選網域,轉向似乎就沒有必要了。但確實又有不少人證實這是有效的,反正目前還沒有人說這種方法會對SEO或pagerank有什麼損害。
在.htaccess中寫入:
Options +FollowSymlinks All -Indexes
rewriteEngine on
rewriteBase /
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule ^(.*)$ http://www.domain.com/ $1 [R=301,L]
強制去除3w
下面以Wordpress 為例,其它的狀況,可以自己參考解決。在你的Wordpress 目錄下通常會有一個.htaccess 文件,如果沒有,那就手動建立一個。如果你設定了permalink 的話,.htaccess 裡面的內容會有以下一坨:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
具體是啥意思咱就甭管它了,只管在RewriteBase / 這行下面加上:
RewriteCond %{HTTP_HOST} ^ www.yourdomain.tld $ [NC]
RewriteRule ^(.*)$ http://yourdomain.tld/ $1 [R=301,L]
這樣就大功告成了。當然要把yourdomain.tld 換成自己的網域。上面兩行的意思是把www.yourdomain.tld這種形式改寫成yourdomain.tld, 並把訪問前者的所有連結永久轉向到後者。
域名前強制加上www
如果你實在是堅持要把www 加在前面,我上面的算是白寫了,表示遺憾。但,你可以。只要把上面加的兩行程式碼改成這樣:
RewriteCond %{HTTP_HOST} ^yourdomain.tld$ [NC]
RewriteRule ^(.*)$ http://www.yourdomain.tld/ $1 [R=301,L]
.htaccess是網站管理員可以應用的強大工具,有更多的變化以適應不同的用途,可以節省時間及提高網站的安全性
.htaccess的特別說明
* 啟用.htaccess,需要修改httpd.conf,啟用AllowOverride,並可以用AllowOverride限制特定指令的使用
* 如果需要使用.htaccess以外的其他檔案名,可以用AccessFileName指令來改變。例如,需要使用.config ,則可以在伺服器設定檔中以下列方法設定:
AccessFileName .config
* 一般情況下,不應該使用. htaccess文件,除非你對主設定檔沒有存取權限。有一種很常見的誤解,認為使用者認證只能透過.htaccess檔案來實現,其實並不是這樣,把使用者認證寫在主設定檔中是完全可行的,而且是一種很好的方法。 .htaccess檔案應該被用在內容提供者需要針對特定目錄改變伺服器的配置而又沒有root權限的情況下。如果伺服器管理員不願意頻繁修改配置,則可以允許使用者透過.htaccess檔案自行修改配置,尤其是ISP在同一個機器上運行了多個使用者站點,而又希望使用者可以自行改變配置的情況下。雖然如此,一般都應該盡量避免使用.htaccess檔。任何希望放在.htaccess檔案中的配置,都可以放在主設定檔的<Directory>段中,而且更有效率。避免使用.htaccess檔案有兩個主要原因,即效能和安全性。
附:.htaccess工具連接
線上.htaccess檔案產生器
http://cooletips.de/htaccess/
能夠在線生成. htaccess文件,很簡單的就配置重定向,系統錯誤文件等。
.htaccess編輯器線上編輯器
可自訂預設編碼,錯誤頁面等等