.htaccess文件

1.1 什麼是.htaccess文件

從本指南中,你將能夠學習到有關.htaccess文件及其功能的知識,並用以優化你的網站。儘管.htaccess只是一個文件,但它能夠更改服務器的設置,容許你作許多不一樣的事情,最流行的功能是您能夠建立自定義的「404 error」頁面。.htaccess 並不難於使用,歸根結底,它只是在一個text文檔中添加幾條簡單的指令而已。
首先你要判斷主機支持它
這可能很難用簡單的答案來回答。許多主機支持.htaccess,但實際上並不會特別聲明,許多其餘類型的主機有能力但並不容許他們的用戶使用. htaccess。通常來講,若是你的主機使用Unix或Linux系統,或任何版本的Apache網絡服務器,從理論上都是支持.htaccess的,儘管你的主機服務商可能不容許你使用它。
判斷你的主機是否容許.htaccess,一個標誌很好的是它是否支持文件夾密碼保護。爲達到此功能,主機服務商須要使用.htaccess(固然,少數狀況下他們雖提供密碼保護功能,但卻並不容許你使用.htaccess)。若是你不肯定本身的主機是否支持.htaccess,最好的辦法是上傳你本身的.htaccess文件看看是否有用,或者直接發送e-mail向你的主機服務商諮詢。
Apache系統中的.htaccess文件(或者」分佈式配置文件」提供了針對目錄改變配置的方法,即,在一個特定的文檔目錄中放置一個包含一個或多個指令的文件,以做用於此目錄及其全部子目錄。做爲用戶,所能使用的命令受到限制。管理員能夠經過Apache的AllowOverride指令來設置。
子目錄中的指令會覆蓋更高級目錄或者主服務器配置文件中的指令。
.htaccess必須以ASCII模式上傳,最好將其權限設置爲644。
.htaccess能夠作大量的事情,包括:文件夾密碼保護、用戶自動重定向、自定義錯誤頁面、改變你的文件擴展名、封禁特定IP地址的用戶、只容許特定IP地址的用戶、禁止目錄列表,以及使用其餘文件做爲index文件。

1.2 如何建立.httaccess文件

建立.htaccess文件也許會給你帶來一些困難。寫文件很容易,你只須要在文字編緝器(例如:寫字板)裏寫下適當的代碼。真正困難的多是文件的保存,由於.htaccess是一個古怪的文件名(它事實上沒有文件名,只有一個由8個字母組成的擴展名),而在一些系統(如windows 3.1)中沒法接受這樣的文件名。在大多數的操做系統中,你須要作的是將文檔保存成名爲: 「.htaccess」 (包括引號)。若是這也不行,你須要將其先命名爲其它名字(例如htaccess.txt),再將其上傳到服務器上,以後直接使用FTP軟件來重命名。
警告
在使用.htaccess以前,我必須給你一些警告。雖然在服務器上使用.htaccess絕對不太可能給你帶來任何麻煩(若是有些東西錯了,它只是沒效用罷了),但若是你使用Microsoft FrontPage Extensions,就必須特別當心。由於FrontPage Extensions自己使用了.htaccess,所以你不能編輯它並加入你本身的信息。若是確實有這方面的須要(並不推薦,可是可能),你應該先從服務器上下載.htaccess文檔(若是存在),以後在前面加上你的代碼。
2|.httacces文件的配置

2.1.配置.htaccess 自定義錯誤頁

我要介紹的.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 「你沒有權限訪問該頁面,請放棄!」

2.2.配置.htaccess 停示顯示目錄列表

有些時候,因爲某種緣由,你的目錄裏沒有index文件,這意味着當有人在瀏覽器地址欄鍵入了該目錄的路徑,該目錄下全部的文件都會顯示出來,這會給你的網站留下安全隱患。
爲避免這種狀況(而沒必要建立一堆的新index文件),你能夠在你的.htaccess文檔中鍵入如下命令,用以阻止目錄列表的顯示: Options -Indexes

2.3.配置.htaccess 阻止/容許特定的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
不過這並不影響腳本程序使用這個目錄下的文檔。

2.4.配置.htaccess 替換index文件

改變缺省的首頁文件
通常狀況下缺省的首頁文件名有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

2.5.配置.htaccess 重定向頁面

.htaccess最有用的功能之一就是將請求重定向到同站內或站外的不一樣文檔。這在你改變了一個文件名稱,但仍然想讓用戶用舊地址訪問到它時,變的極爲有用。另外一個應用(我發現的頗有用的)是重定向到一個長URL,例如在個人時事通信中,我可使用一個很簡短的URL來指向個人會員連接。如下是一個重定向文件的例子:
           Redirect /location/from/root/file.ext
           [url]http://www.w3sky.com/new/file/123.html[/url]
上述例子中,訪問在root目錄下的名爲oldfile.html能夠鍵入:
           /oldfile.html
訪問一箇舊次級目錄中的文件能夠鍵入:
           /old/oldfile.html
你也可使用.htaccess重定向整個網站的目錄。假如你的網站上有一個名爲olddirectory的目錄,而且你已經在一個新網站 [url]http://www.w3sky.com/newdirectory/[/url]上創建了與上相同的文檔,你能夠將舊目錄下全部的文件作一次重定向而沒必要一一聲明:
           Redirect /olddirectory [url]http://www.w3sky.com/newdirectory[/url]
這樣,任何指向到站點中/olddirectory目錄的請求都將被從新指向新的站點,包括附加的額外URL信息。例若有人鍵入:
            [url]http://www.w3sky.com/olddirecotry/oldfiles/p_w_picpaths/p_w_picpath.gif[/url]
請求將被重定向到:
            [url]http://www.w3sky.com/newdirectory/oldfiles/p_w_picpaths/p_w_picpath.gif[/url]
若是正確使用,此功能將極其強大。
咱們可能對網站進行從新規劃,將文檔進行了遷移,或者更改了目錄。這時候,來自搜索引擎或者其餘網站連接過來的訪問就可能出錯。這種狀況下,能夠經過以下指令來完成舊的URL自動轉向到新的地址:
           Redirect /舊目錄/舊文檔名 新文檔的地址
或者整個目錄的轉向:
           Redirect 舊目錄 新目錄

3.1.密碼保護的.htaccess文件

儘管有各類各樣的.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文件(後面詳述該文檔)的完整服務器路徑。若是你不知道你網站空間的完整路徑,請詢問一下你的系統管理員。

3.2.密碼保護的.htpasswd文件

目錄的密碼保護比.htaccess的其餘功能要麻煩些,由於你必須同時建立一個包含用戶名和密碼的文檔,用於訪問你的網站,相關信息(默認)位於一個名爲.htpasswd的文檔裏。像.htaccess同樣,.htpasswd也是一個沒有文件名且具備8位擴展名的文檔,能夠放置在你網站裏的任何地方(此時密碼應加密),但建議你將其保存在網站Web根目錄外,這樣經過網絡就沒法訪問到它了。1516501417
在使用.htaccess來設置目錄的密碼保護時,它包含了密碼文件的路徑。從安全考慮,有必要把.htaccess也保護起來,不讓別人看到其中的內容。雖然能夠用其餘方式作到這點,好比文檔的權限。不過,.htaccess自己也能作到,只需加入以下的指令:1516501417
           order allow,deny
           deny from all

3.3.配置 .htaccess 輸入用戶名和密碼

要利用.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文檔,能夠自動新增/移除用戶等。

3.4.配置.htaccess 直接訪問加密網站

當你試圖訪問被.htaccess密碼保護的目錄時,你的瀏覽器會彈出標準的username/password對話窗口。若是你不喜歡這種方式,有些腳本程序能夠容許你在頁面內嵌入username/password輸入框來進行認證,你也能夠在瀏覽器的URL框內以如下方式輸入用戶名和密碼(未加密的):
           [url]http://username:password@[/url][url]www.w3sky.com/directory/[/url]

3.5.利用 .htaccess 防止盜鏈

若是不喜歡別人在他們的網頁上鍊接本身的圖片、文檔的話,也能夠經過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)$ [url]http://www.w3sky.com/[/url]替代圖片文件名 [R,L]

3.6.利用 .htaccess進行地址轉向

這種方法,就是把yourdomain.com的流量所有 301轉向[url]www.yourdomain.com[/url](或者反過來)。其實對於這種方法,國外有人認爲對PageRank沒有幫助。我以爲是由於他們看到Google管理員工具中有一個首選域工具,能夠指定Google的爬蟲把 [url]www.yourdomain.com[/url]或者yourdomain.com做爲抓取和排名的首選域,轉向彷佛就沒有必要了。但確實又有很多人證明這是有效的,反正目前尚未人說這種方法會對SEO或者pagerank有什麼損害。
在.htaccess中寫入:
              Options +FollowSymlinks All -Indexes
              rewriteEngine on
              rewriteBase /
              RewriteCond %{HTTP_HOST} ^domain.com$
              RewriteRule ^(.*)$
[url]http://www.domain.com/[/url] $1 [R=301,L]

3.7.利用 .htaccess對域名中「www」的控制

強制去除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} ^[url]www.yourdomain.tld[/url]$ [NC]
             RewriteRule ^(.*)$
[url]http://yourdomain.tld/[/url]$1 [R=301,L]
這樣就大功告成了。固然要把 yourdomain.tld 換成你本身的域名。上面兩行的意思是把 [url]www.yourdomain.tld[/url] 這種形式改寫成 yourdomain.tld, 並把訪問前者的全部連接 永久轉向到後者。
域名前強制加上www
若是你實在是堅持要把 www 加在前面,我上面的算是白寫了,表示遺憾。 但,你能夠。只需把上面添加的兩行代碼改爲這樣:
             RewriteCond %{HTTP_HOST} ^yourdomain.tld$ [NC]
             RewriteRule ^(.*)$
[url]http://www.yourdomain.tld/[/url]$1 [R=301,L]

4.1.     .htaccess 總結

.htaccess是一個站點管理員能夠應用的強大工具,有更多的變化以適應不一樣的用途,能夠節約時間及提升網站的安全性
.htaccess的特別說明
* 啓用.htaccess,須要修改httpd.conf,啓用AllowOverride,並能夠用AllowOverride限制特定命令的使用
* 若是須要使用.htaccess之外的其餘文件名,能夠用AccessFileName指令來改變。例如,須要使用.config ,則能夠在服務器配置文件中按如下方法配置:
           AccessFileName .config
* 通常狀況下,不該該使用. htaccess文件,除非你對主配置文件沒有訪問權限。有一種很常見的誤解,認爲用戶認證只能經過.htaccess文件實現,其實並非這樣,把用戶認證寫在主配置文件中是徹底可行的,並且是一種很好的方法。.htaccess文件應該被用在內容提供者須要針對特定目錄改變服務器的配置而又沒有 root權限的狀況下。若是服務器管理員不肯意頻繁修改配置,則能夠容許用戶經過.htaccess文件本身修改配置,尤爲是ISP在同一個機器上運行了多個用戶站點,而又但願用戶能夠本身改變配置的狀況下。雖然如此,通常都應該儘量地避免使用.htaccess文件。任何但願放在.htaccess文件中的配置,均可以放在主配置文件的<Directory>段中,並且更高效。避免使用.htaccess文件有兩個主要緣由,即性能和安全。
附:.htaccess工具鏈接
在線 .htaccess文件生成器
[url]http://cooletips.de/htaccess/[/url] 可以在線生成. htaccess文件,很簡單的就配置重定向,系統錯誤文件等。
相關文章
相關標籤/搜索