五個(gè)htaccess文件的常用技巧
說(shuō)起.htaccess規(guī)則文件,很多朋友都不會(huì)陌生,特別是使用wordpress、discuz等php類(lèi)開(kāi)源產(chǎn)品的朋友,該文件的作用與windows主機(jī)下的httpd.ini文件稍有雷同之處,但.htaccess的作用要大得多,我的幾個(gè)站點(diǎn)也都使用了.htaccess文件,今天就分享幾個(gè)常用的技巧。
Htaccess 文件是Apache HTTP web服務(wù)器的純文本配置文件。無(wú)需訪問(wèn)httpd.conf 文件,用戶(hù)就可以設(shè)置目錄選項(xiàng)。因此,要求你的服務(wù)器使用Apache,并且主機(jī)也支持htaccess文件(大多數(shù)主機(jī)都支持)。
1. 防止盜鏈
盜鏈 也叫內(nèi)嵌鏈接,是指一個(gè)網(wǎng)站的鏈接直接導(dǎo)向另一個(gè)網(wǎng)站上的對(duì)象。這會(huì)給另一個(gè)網(wǎng)站造成帶寬和流量的損失。對(duì)于提供大量圖片的站點(diǎn)來(lái)說(shuō),這個(gè)問(wèn)題就比較嚴(yán)重。 使用htaccess可以解決這個(gè)問(wèn)題。
我們將按下面的步驟一步步操作
首先得打開(kāi)Apache里的mod_rewrite,用于實(shí)現(xiàn)重新定向用戶(hù)的請(qǐng)求。
下一步,用RewriteCond設(shè)置條件。這需要運(yùn)用到兩個(gè)參數(shù)TestString 和CondPattern.TestString是用來(lái)驗(yàn)證CondPattern的字符串(使用常規(guī)的表達(dá))。.${HTTP_REFERER}是Apache提供的域名請(qǐng)求變量。為了保護(hù)代理服務(wù)器用戶(hù)提交空白請(qǐng)求,這里允許用戶(hù)發(fā)送空白HTTP請(qǐng)求。
接著,用同樣的句法設(shè)置允許鏈接圖片的URL.命令最后的[NC]標(biāo)記,只是讓重寫(xiě)引擎忽視它。你可以用相同的句法添加更多的域名。為了方便舉例,我添加了我的個(gè)人域名。
最后,最后一行是重寫(xiě)規(guī)則,上面所有的條件都不滿(mǎn)足的情況下使用。也要用到兩個(gè)變量Pattern和Substitution,pattern用的是常規(guī)的表達(dá)匹配,substitution 是替換任何匹配用的。此時(shí),申請(qǐng)需以jpg、png、 gif結(jié)尾。找到申請(qǐng)后,用空白來(lái)替代。通過(guò)標(biāo)簽來(lái)進(jìn)一步說(shuō)明要干什么, NC代表無(wú)符合的情況,F(xiàn)發(fā)送403禁止錯(cuò)誤頁(yè)面給用戶(hù),L告知重寫(xiě)引擎停止重寫(xiě),因此其它規(guī)則都不再適用。
這種方法相當(dāng)簡(jiǎn)單,我們的目的也就是告訴用戶(hù)我們不想他們盜用我們的圖片,那么干脆不發(fā)送403錯(cuò)誤禁止頁(yè)面直接把盜鏈請(qǐng)求轉(zhuǎn)到一個(gè)圖片。把最后一行的代碼用下面的代碼替換就可以。
#show an alternate image
RewriteRule \.(jpg|png|gif)$ http://demo.collegeaintcheap.com/envato/htaccess/hotlink/images/hotlink.jpeg [NC,R,L]
你可以把域名URL地址改為圖像路徑,不過(guò)需要以jpg、png、gif 結(jié)尾。要不然會(huì)重新運(yùn)用規(guī)則給服務(wù)器造成死循環(huán)。我建議使用.jpeg來(lái)解決這個(gè)問(wèn)題。這里R標(biāo)記取代F代表發(fā)送一個(gè)轉(zhuǎn)向。
2. 通過(guò)IP地址阻止用戶(hù)
如果網(wǎng)站上出現(xiàn)大量的垃圾郵件,就可以通過(guò)IP地址來(lái)阻止用戶(hù)。你可以在日志文件里找到他們的IP,只要把IP地址添加到htaccess文件就可以。
Order Deny,Allow
Deny from 24.121.202.23
# Deny from 0.0.0.0
在mod_access模塊里用Order指令可以拒絕或允許指定IP訪問(wèn)。只要使用句法Deny from IP ADDRESS就可以禁止這些用戶(hù)訪問(wèn)我們的目錄。
3.ErrorDocument
所有專(zhuān)業(yè)性的網(wǎng)站都會(huì)使用自定義的錯(cuò)誤頁(yè)面。在Apache 里可以使用ErrorDocument指令來(lái)完成。自定義的錯(cuò)誤頁(yè)面要比默認(rèn)的頁(yè)面好很多。
ErrorDocument有兩個(gè)參數(shù)error-code和document.上面的代碼是最常見(jiàn)的HTTP錯(cuò)誤提示代碼:404未找到、403 禁止、500 服務(wù)器出錯(cuò)。你可以給你的錯(cuò)誤文件提供完整的URL或相對(duì)路徑。你也可以轉(zhuǎn)向到一個(gè)PHP腳本上,用一個(gè)數(shù)據(jù)庫(kù)記錄錯(cuò)誤或者發(fā)送郵件給你(雖然有點(diǎn)煩人)。這是用來(lái)控制web應(yīng)用程序的一個(gè)非常好的方法??纯?Smashing Magazine的404 錯(cuò)誤頁(yè)面展示獲得一些啟發(fā)吧!
ErrorDocument 401 /error/401.html //401錯(cuò)誤轉(zhuǎn)向到error/401.html 頁(yè)面
ErrorDocument 403 /error/403.html
ErrorDocument 404 /error/404.html
ErrorDocument 500 /error/500.html
4.升級(jí)時(shí)轉(zhuǎn)向
如果你的網(wǎng)站正在升級(jí),你需要轉(zhuǎn)向到另一個(gè)頁(yè)面通知用戶(hù),以防止用戶(hù)看到損壞頁(yè)面或者加載過(guò)程出現(xiàn)的潛在安全漏洞問(wèn)題。在頁(yè)面對(duì)所有用戶(hù)開(kāi)放前,我們需要先允許指定IP訪問(wèn)來(lái)測(cè)試。所有這些都可以在htaccess 文件上實(shí)現(xiàn)。
我們還是使用mod_rewrite 不過(guò)是一種逆向思維。首先我們需要設(shè)定條件來(lái)排除升級(jí)的文檔,否則服務(wù)器陷入循環(huán)。接著,測(cè)試用的IP不執(zhí)行轉(zhuǎn)向。最后用重寫(xiě)規(guī)則給用戶(hù)發(fā)回一個(gè)升級(jí)頁(yè)面。標(biāo)簽還是跟之前的一樣,只不過(guò)定向到302狀態(tài),告訴瀏覽器該頁(yè)面暫時(shí)遷移了并做相應(yīng)的緩存。同樣地在Smashing Magazine,里也有很多的網(wǎng)站維護(hù)頁(yè)面。
5. 隱藏目錄列表
出于安全考慮,限制目錄列表的權(quán)限和Apache默認(rèn)行為是有必要的。這一點(diǎn)也可以在htaccess文件上實(shí)現(xiàn)。防止訪問(wèn)者看到我們的目錄列表。
Options -Indexes
這樣,用戶(hù)如果發(fā)送無(wú)索引的目錄請(qǐng)求,就會(huì)顯示 403禁止錯(cuò)誤頁(yè)面。
是任何版本的Apache Web服務(wù)器都是支持.htaccess的?;\統(tǒng)地說(shuō),.htaccess可以幫我們實(shí)現(xiàn)包括:文件夾密碼保護(hù)、用戶(hù)自動(dòng)重定向、自定義錯(cuò)誤頁(yè)面、改變你的文件擴(kuò)展名、封禁特定IP地址的用戶(hù)、只允許特定IP地址的用戶(hù)、禁止目錄列表,以及使用其他文件作為index文件等一些功能。
英文原文:5 Fun and Practical Htaccess Solutions
來(lái)源:月光博客