在.htaccess中使用技巧域名跳轉(zhuǎn)&防盜鏈
在.htaccess 中使用技巧域名跳轉(zhuǎn)&防盜鏈有些用戶可能還不知道.htaccess 文件是什么,所以我們首先來說明一下htaccess 的作用。在wordpress 的 根目錄下,你會看到一個名為
在.htaccess 中使用技巧域名跳轉(zhuǎn)&防盜鏈
有些用戶可能還不知道.htaccess 文件是什么,所以我們首先來說明一下htaccess 的作用。在wordpress 的 根目錄下,你會看到一個名為.htaccess 的文件,它可以是由系統(tǒng)創(chuàng)建、也可以是用戶自己編輯而成的。它是Apache 服務(wù)器中的一個配置文件,它負 責(zé)相關(guān)目錄下的網(wǎng)頁配置,對wordpress 中實現(xiàn)永久鏈接(Permalink)至關(guān)重要。同時利用它,我們也可以實現(xiàn):網(wǎng)頁301重定向、自定義 404錯誤頁面、改變文件擴展名、允許/阻止特定的用戶或者目錄的訪問、禁止目錄列表、配置默認文檔等功能。下面我們就來看看如何配制htaccess 。 以下是Wordpress 中默認的htaccess 內(nèi)容。我們一一來看一下每一行的作用。
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond {REQUEST_FILENAME} !-f
RewriteCond {REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
第一行用來判斷Apache 中是否安裝了rewrite 模塊。如果存在rewrite 模塊,“RewriteEngine On” 則用來開啟rewrite 模塊。
“RewriteBase /” 用來表示Apache 要對URL 重寫的部分。比方站點為http://domain.com/。RewriteBase 后面為“/”時,表示對主域名下面 的所有子路徑進行重寫,如果是“/blog/” 是只會對http://domain.com/blog/后面的部分進行重寫。
RewriteCond 表示重寫URL 應(yīng)滿足的一些條件,RewriteRule 后面的第一個參數(shù)表示要重寫的URL 滿足的規(guī)則(正則表達式),第二個參數(shù)表示重寫后的URL 。最后的那個[L]表示表明當(dāng)前規(guī)則是最后一條規(guī)則,停止分 析以后規(guī)則的重寫。(方框內(nèi)還可以支持很多其它參數(shù),我們會在下面介紹)
所以“RewriteRule ^index.php$ – [L]”表示若當(dāng)前請求的URL 恰好為index.php ,則不要進行后面的判斷了。
“RewriteCond {REQUEST_FILENAME} !-f”和
“RewriteCond {REQUEST_FILENAME} ! -d”表示當(dāng)前的URL 并不是一個文件(-f)
,或目錄(-d)。當(dāng)這兩個條件同時滿足時,最后一條“RewriteRule . /index.php
[L]”會把所有請求都重寫為index.php 。
從這里我們可以看出,wordpress 默認把所有不指到靜態(tài)文件或目錄的url 全部重寫到了index.php ,然后由index.php 統(tǒng)一處理請求。
剛才我們提到了[L]的作用,其實RewriteRule 還支持很多其它參數(shù),包括: ?
?
?
?
?
?
?
?
?
?
?
? R 強制外部重定向,后面可以代301或302跳轉(zhuǎn)。 F 禁用URL, 返回403HTTP 狀態(tài)碼。 G 強制URL 為GONE ,返回410HTTP 狀態(tài)碼。 P 強制使用代理轉(zhuǎn)發(fā)。 L 表明當(dāng)前規(guī)則是最后一條規(guī)則,停止分析以后規(guī)則的重寫。 N 重新從第一條規(guī)則開始運行重寫過程。 C 與下一條規(guī)則關(guān)聯(lián)。 T=MIME-type(force MIME type) 強制MIME 類型。 NS 只用于不是內(nèi)部子請求。 NC 不區(qū)分大小寫。 QSA 追加請求字符串。 NE 不在輸出轉(zhuǎn)義特殊字符。
htaccess 在Wordpress 中的一些使用技巧
上面講了一下Wordpress 中.httaccess 的基本用途,其實利用htaccess 文件還可以幫助我們完成很多其它的工作。下面我來介紹其中一些常用的功能,更多的讀者可以自己去嘗試。
域名跳轉(zhuǎn)
有些時候,我們會想把moke8.com 的域名全部跳轉(zhuǎn)到www.moke8.com 下。這個時候htaccess 就可以派上用場了。在.htaccess 文件中添加類似下面的代碼:(下面這段代碼在網(wǎng)站更換域名時,也同樣使用)
RewriteCond {HTTP_HOST} ^moke8.com [NC]
RewriteRule ^(.*)$ http://www.moke8.com/$1 [L,R=301]
類似的還可以用htacess 也可以用來更換URL 的目錄結(jié)構(gòu),這個在Category 名字被更換時特別有用:
RewriteRule ^/?old_directory/([a-z/.] )$ new_directory/$1 [R=301,L] 注:R 后面的301表示此跳轉(zhuǎn)為永久跳轉(zhuǎn),也可以根據(jù)實際情況該成臨時跳轉(zhuǎn)(302)。
,防盜鏈
圖片的盜鏈可能是很多站長最為頭痛的事情,自己的圖片被人白白拿去不說,還會免費占用了自己網(wǎng)站的資源,使用htaccess 文件同樣可以實現(xiàn)防盜鏈的功能。代碼如下:
RewriteEngine On
RewriteCond {HTTP_REFERER} !^http://moke8.com/.*$ [NC]
RewriteCond {HTTP_REFERER} !^http://moke8.com$ [NC]
RewriteCond {HTTP_REFERER} !^http://www.moke8.com/.*$ [NC] RewriteCond {HTTP_REFERER} !^http://www.moke8.com$ [NC]
RewriteRule .*.(gif|jpg|jpeg|png|bmp|swf|mp3|wav|zip|rar)$ http://www.moke8.com/404.html [R,NC]
這段代碼會判斷請求的referer ,如果鏈接不是從本站點擊過來的,默認都會跳轉(zhuǎn)到一個404頁面。在RewriteRule 中指定了要防盜鏈的文件類型。 防止垃圾評論
例用htaccess 同樣可以防止一部分來源不明的垃圾評論:
RewriteEngine On
RewriteCond {REQUEST_METHOD} POST
RewriteCond {REQUEST_URI} .wp-comments-post.php*
RewriteCond {HTTP_REFERER} !.*domain.com.* [OR]
RewriteCond {HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://domain.com/$ [R=301,L]
這段代碼,判斷一個POST 請求是否是由瀏覽器發(fā)出的(判斷HTTP_USER_AGENT是否為空),并且Refer 是否本站的,只要其中任意一個條件不滿足,就將請求自動跳轉(zhuǎn)到首頁。
注意,這段代碼只適用于Wordpress ,其實的框架可以根據(jù)其具體情況把wp-comments-post 修改成對應(yīng)的URL 。
只允許自己訪問Wordpress 的后臺
如果你有一個固定的IP ,那么你完全可以在htaccess 中設(shè)定只有自己能訪問Wordpress 的后臺。在wp-admin 目錄下建立一個新的.htaccess 文件,里面寫入如下代碼:
AuthUserFile /dev/null
,AuthGroupFile /dev/null
AuthType Basic
order deny,allow
deny from all
# xx.xx.xx.xx為您的IP ,您也以設(shè)定多個IP 。
allow from xx.xx.xx.xx
allow from xx.xx.xx.xxx
注:對于這段代碼,一定是在wp-admin 文件夾下建立新的htaccess ,很多坑爹的文章都沒有告訴你這一點,直接添加到網(wǎng)站根目錄下的那個htacess 下的話??您要是想要自己的整個網(wǎng)站都只能自己訪問的話,不妨試試。 阻止某些IP 訪問自己的網(wǎng)站
如果有些垃圾網(wǎng)站的Robot 總是不停的抓取你網(wǎng)站的數(shù)據(jù),你可以在htaccess 中屏蔽掉這些IP 。
order allow,deny
deny from xx.xx.xx.xx
allow from all
類似的,更換一下deny 和allow ,可以實現(xiàn)只允許某些特定IP 訪問自己的網(wǎng)站,當(dāng)然如果您真的想要這么做的話。
判斷瀏覽器
瀏覽器兼容可以說是前端工程師最為心痛的事。與其在css 中寫各種hack ,不如在htacess 中判斷瀏覽器,直接指向不同的css 文件。
RewriteCond {REQUEST_URI} index.css*
RewriteCond {HTTP_USER_AGENT} "^Mozilla/4.0$"
RewriteRule ^(.*)$ http://moke8.com/firefox.css
類似的,利用htacess 判斷訪問者是否持有的是移動設(shè)備也很容易。 RewriteEngine on
RewriteCond {HTTP_USER_AGENT} "Windows CE" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "NetFront" [NC,OR]
,RewriteCond {HTTP_USER_AGENT} "Palm OS" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "Blazer" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "Elaine" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "^WAP.*$" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "Plucker" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "vodafone" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "iPhone" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "nokia" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "symbian" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "Opera Mini" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "BlackBerry" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "j2me" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "midp" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "htc" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "java" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "sony" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "android" [NC,OR]
RewriteCond {HTTP_USER_AGENT} "AvantGo" [NC]
RewriteRule (.*) http://mobi.moke8.com/ [R,L]
因為有點多,為了方便閱讀,還有通用的瀏覽器的USER_AGENT放在了文章的最后。有興趣的讀者去可以去看看吧。
禁止訪問特定的文件類型或文件
有些特定的文件、或某些文件,我們可能不想讓用戶訪問到,可以用如下代碼:
order allow,deny
deny from all
Deny from all
判斷瀏覽器的語言
想要根據(jù)瀏覽器的語言設(shè)定,跳轉(zhuǎn)到不同的頁面,可以用如下代碼: RewriteCond {HTTP:Accept-Language} ^zh-cn.*$ [NC]
RewriteRule ^/?$ index_cn.htm [R=301,L]
,總結(jié)
就說到這里了,其實htaccess 的用途還有很多很多,讀者可以根據(jù)上面的例子自己去挖掘htaccess 的新的用途。不過注意修改htaccess 時一定要小心,因為一但寫錯,很可能導(dǎo)致整個網(wǎng)站都無法訪問。