2012-11-09 12:11:44
htaccess
.htaccess文件,Apache環(huán)境中,seo很重要的一個環(huán)節(jié)。管理員可以通過Apache的AllowOverride指令來設(shè)置。作為用戶,所能使用的命令受到限制。
1. .htaccess必須以ASCII模式上傳,最好將其權(quán)限設(shè)置為644。
2. 新建一個空文件(記事本文件),如:新建文本文檔.txt。
3. 填寫以下重定向規(guī)則代碼,然后把“新建文本文檔.txt”改為“.htaccess”(文件名是空的,后綴是.htaccess)。
4. 把.htaccess上傳到你網(wǎng)站的根目錄。
注:如在自己的電腦上無法修改文件名,提示文件名不能為空!我們可以先把“新建文本文檔.txt”上傳到網(wǎng)站根目錄,然后再在ftp上重命名為“.htaccess”。
經(jīng)過收集整理加原創(chuàng),我把htaccess文件功能分為一下7類:
1. URL轉(zhuǎn)向 2. htaccess網(wǎng)址規(guī)范化 3. 錯誤文檔的定位 4. 改變?nèi)笔〉氖醉撐募?5. 阻止爬蟲 6. 文檔訪問的密碼保護 7. 防止盜鏈 8.pr劫持
另附: Discuz!論壇靜態(tài)化配置規(guī)則。
pr劫持我在另外一篇文章中已寫到,大家可以看看,這里就不細說了。
一. htaccess實現(xiàn)網(wǎng)址規(guī)范化
友博網(wǎng)絡(luò)多次提到:網(wǎng)址規(guī)范化在SEO中是一個很重要的環(huán)節(jié),網(wǎng)址的不規(guī)范,不僅能造成復(fù)制,還可能造成權(quán)重不集中的現(xiàn)象,影響排名。
現(xiàn)在大多數(shù)網(wǎng)站,綁定域名都有帶WWW和不帶兩個版本,甚至很多網(wǎng)站同時綁定多個域名。經(jīng)過處理(跳轉(zhuǎn)、CNAME……),對于訪問者來說可能沒有任何影響,看到的都是同樣的內(nèi)容;但對于搜索引擎,就無法確定哪一個網(wǎng)址是真正的主頁。
可控因素,網(wǎng)站內(nèi)容鏈接應(yīng)該保持同一個版本,比如整站中,返回首頁的地址為固定的一個版本。但還有一個不可控的因素,就是別人鏈到你的網(wǎng)站,所使用的網(wǎng)址。很多自發(fā)鏈接或交換鏈接時,別人可能會省略掉WWW,或采用綁定的另一域名。
互聯(lián)網(wǎng)用戶不可控,我們可以從服務(wù)器內(nèi)部來控制。利用Apache的.htaccess,使用301重定向,規(guī)范網(wǎng)址。
用301將不帶WWW的域名重定向
rewriteEngine on
rewriteCond % ^u-bo.com [NC]
rewriteRule ^(.*)$ http://www.u-bo.com/$1 [R=301,L]
用301將綁定的其他多個域名重定向到主域名
RewriteEngine on
RewriteCond % ^u-bo.com$ [OR]
RewriteCond % ^bbs.su-bo.com [OR]
RewriteCond % ^u-bo.cn$ [OR]
RewriteCond % ^www.u-bo.cn$ [OR]
RewriteCond % ^bbs.u-bo.cn$
RewriteRule ^(.*)$ http://www.u-bo.com/$1 [R=301,L]
當(dāng)然,也可以再擴展一下,將index.html、index.php等也重定向一下:
RewriteEngine on
RewriteCond % ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.u-bo.com/ [R=301,L]
Enabling SSI Via htaccess 通過htaccess允許SSI(Server Side Including)功能
AddType text/html .shtml
AddHandler server-parsed .shtml
Options Indexes FollowSymLinks Includes
DirectoryIndex index.shtml index.html
Blocking users/sites by referrer 根據(jù)referrer阻止用戶/站點訪問
需要mod_rewrite模塊
例1. 阻止單一referrer: u-bo.com
RewriteEngine on
# Options +FollowSymlinks
RewriteCond % u-bo\.com [NC]
RewriteRule .* - [F]
例2. 阻止多個referrer: u-bo.com, u-bo.cn
RewriteEngine on
# Options +FollowSymlinks
RewriteCond % u-bo\.com [NC,OR]
RewriteCond % u-bo\.com
RewriteRule .* - [F]
[NC] - 大小寫不敏感(Case-insensite)
[F] - 403 Forbidden
注意以上代碼注釋掉了”Options +FollowSymlinks”這個語句。如果服務(wù)器未在 httpd.conf 的 段落設(shè)置 FollowSymLinks, 則需要加上這句,否則會得到”500 Internal Server error”錯誤。
Blocking bad bots and site rippers (aka offline browsers) 阻止壞爬蟲和離線瀏覽器
需要mod_rewrite模塊
二. URL轉(zhuǎn)向
當(dāng)我們對網(wǎng)站改版后,很有可能url也隨這網(wǎng)站的改版而改變了。這時候,搜索引擎或者其他網(wǎng)站鏈接過來的訪問就可能出錯。這種情況下,我們可以通過htaccess文件如下指令來完成舊的URL自動轉(zhuǎn)向到新的地址:
Redirect /舊目錄/舊文檔名 新文檔的地址
或者整個目錄的轉(zhuǎn)向:
Redirect 舊目錄 新目錄
三. 錯誤文檔的定位
用戶可以利用.htaccess指定自己事先制作好的錯誤提醒頁面。一般情況下,人們可以專門設(shè)立一個目錄,例如errors放置這些頁面。然后再.htaccess中,加入如下的指令:
ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/internalerror.html
一條指令一行。上述第一條指令的意思是對于404,也就是沒有找到所需要的文檔的時候得顯示頁面為/errors目錄下的notfound.html頁面。不難看出語法格式為:
ErrorDocument 錯誤代碼 /目錄名/文件名.擴展名
如果所需要提示的信息很少的話,不必專門制作頁面,直接在指令中使用HTML號了,例如下面這個例子:
ErrorDocument 401 "
你沒有權(quán)限訪問該頁面,請放棄!
常用的客戶端請求錯誤返回代碼:
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
常見的服務(wù)器錯誤返回代碼:
500 Internal Server Error
四. 改變?nèi)笔〉氖醉撐募?/strong>
一般情況下缺省的首頁文件名有default、index等。不過,有些時候目錄中沒有缺省文件,而是某個特定的文件名,比如在pmwiki中是 pmwiki.php。這種情況下,要用戶記住文件名來訪問很麻煩。在.htaccess中可以輕易的設(shè)置新的缺省文件名:
DirectoryIndex 新的缺省文件名
也可以列出多個,順序表明它們之間的優(yōu)先級別,例如:
DirectoryIndex filename.html index.cgi index.pl default.htm
五. 壞爬蟲? 比如一些抓垃圾email地址的爬蟲和不遵守robots.txt的爬蟲
可以根據(jù) HTTP_USER_AGENT 來判斷它們
(但是對于一些搜索引擎把自己的agent設(shè)置為 “Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)” ,就無能為力了)
RewriteEngine On
RewriteCond % ^BlackWidow [OR]
RewriteCond % ^Bot\ mailto:123@u-bo.com [OR]
RewriteCond % ^ChinaClaw [OR]
RewriteCond % ^Custo [OR]
RewriteCond % ^DISCo [OR]
RewriteCond % ^Download\ Demon [OR]
RewriteCond % ^eCatch [OR]
RewriteCond % ^EirGrabber [OR]
RewriteCond % ^EmailSiphon [OR]
RewriteCond % ^EmailWolf [OR]
RewriteCond % ^Express\ WebPictures [OR]
RewriteCond % ^ExtractorPro [OR]
RewriteCond % ^EyeNetIE [OR]
RewriteCond % ^FlashGet [OR]
RewriteCond % ^GetRight [OR]
RewriteCond % ^GetWeb! [OR]
RewriteCond % ^Go!Zilla [OR]
RewriteCond % ^Go-Ahead-Got-It [OR]
RewriteCond % ^GrabNet [OR]
RewriteCond % ^Grafula [OR]
RewriteCond % ^HMView [OR]
RewriteCond % HTTrack [NC,OR]
RewriteCond % ^Image\ Stripper [OR]
RewriteCond % ^Image\ Sucker [OR]
RewriteCond % Indy\ Library [NC,OR]
RewriteCond % ^InterGET [OR]
RewriteCond % ^Internet\ Ninja [OR]
RewriteCond % ^JetCar [OR]
RewriteCond % ^JOC\ Web\ Spider [OR]
RewriteCond % ^larbin [OR]
RewriteCond % ^LeechFTP [OR]
RewriteCond % ^Mass\ Downloader [OR]
RewriteCond % ^MIDown\ tool [OR]
RewriteCond % ^Mister\ PiX [OR]
RewriteCond % ^Navroad [OR]
RewriteCond % ^NearSite [OR]
RewriteCond % ^NetAnts [OR]
RewriteCond % ^NetSpider [OR]
RewriteCond % ^Net\ Vampire [OR]
RewriteCond % ^NetZIP [OR]
RewriteCond % ^Octopus [OR]
RewriteCond % ^Offline\ Explorer [OR]
RewriteCond % ^Offline\ Navigator [OR]
RewriteCond % ^PageGrabber [OR]
RewriteCond % ^Papa\ Foto [OR]
RewriteCond % ^pavuk [OR]
RewriteCond % ^pcBrowser [OR]
RewriteCond % ^RealDownload [OR]
RewriteCond % ^ReGet [OR]
RewriteCond % ^SiteSnagger [OR]
RewriteCond % ^SmartDownload [OR]
RewriteCond % ^SuperBot [OR]
RewriteCond % ^SuperHTTP [OR]
RewriteCond % ^Surfbot [OR]
RewriteCond % ^tAkeOut [OR]
RewriteCond % ^Teleport\ Pro [OR]
RewriteCond % ^VoidEYE [OR]
RewriteCond % ^Web\ Image\ Collector [OR]
RewriteCond % ^Web\ Sucker [OR]
RewriteCond % ^WebAuto [OR]
RewriteCond % ^WebCopier [OR]
RewriteCond % ^WebFetch [OR]
RewriteCond % ^WebGo\ IS [OR]
RewriteCond % ^WebLeacher [OR]
RewriteCond % ^WebReaper [OR]
RewriteCond % ^WebSauger [OR]
RewriteCond % ^Website\ eXtractor [OR]
RewriteCond % ^Website\ Quester [OR]
RewriteCond % ^WebStripper [OR]
RewriteCond % ^WebWhacker [OR]
RewriteCond % ^WebZIP [OR]
RewriteCond % ^Wget [OR]
RewriteCond % ^Widow [OR]
RewriteCond % ^WWWOFFLE [OR]
RewriteCond % ^Xaldon\ WebSpider [OR]
RewriteCond % ^Zeus
RewriteRule ^.* - [F,L]
[F] - 403 Forbidden
[L] - 連接(Link)
六. 文檔訪問的密碼保護
要利用.htaccess對某個目錄下的文檔設(shè)定訪問用戶和對應(yīng)的密碼,首先要做的是生成一個.htpasswd的文本文檔,例如:
zheng:y4E7Ep8e7EYV
這里密碼經(jīng)過加密,用戶可以自己找些工具將密碼加密成.htaccess支持的編碼。該文檔最好不要放在www目錄下,建議放在www根目錄文檔之外,這樣更為安全些。
有了授權(quán)用戶文檔,可以在.htaccess中加入如下指令了:
AuthUserFile .htpasswd的服務(wù)器目錄
AuthGroupFile /dev/null (需要授權(quán)訪問的目錄)
AuthName EnterPassword
AuthType Basic (授權(quán)類型)
require user wsabstract (允許訪問的用戶,如果希望表中所有用戶都允許,可以使用 require valid-user)
注,括號部分為學(xué)習(xí)時候自己添加的注釋
拒絕來自某個IP的訪問
如果我不想某個政府部門訪問到我的站點的內(nèi)容,那可以通過.htaccess中加入該部門的IP而將它們拒絕在外。
例如:
order allow,deny
deny from 210.10.56.66
deny from 219.5.45.
allow from all
第二行拒絕某個IP,第三行拒絕某個IP段,也就是219.5.45.0~219.2.45.255
想要拒絕所有人?用deny from all好了。不止用IP,也可以用域名來設(shè)定。
保護.htaccess文檔
在使用.htaccess來設(shè)置目錄的密碼保護時,它包含了密碼文件的路徑。從安全考慮,有必要把.htaccess也保護起來,不讓別人看到其中的內(nèi)容。雖然可以用其他方式做到這點,比如文檔的權(quán)限。不過,.htaccess本身也能做到,只需加入如下的指令:
order allow,deny
deny from all
七. 防止盜鏈
如果不喜歡別人在他們的網(wǎng)頁上連接自己的圖片、文檔的話,也可以通過htaccess的指令來做到。
所需要的指令如下:
RewriteEngine on
RewriteCond % !^$
RewriteCond % !^http://(www.)?u-bo.com...*$ [NC]
RewriteRule .(gif|jpg)$ - [F]
如果覺得讓別人的頁面開個天窗不好看,那可以用一張圖片來代替:
RewriteEngine on
RewriteCond % !^$
RewriteCond % !^http://(www.)?u-bo.com...*$ [NC]
RewriteRule .(gif|jpg)$ http://www.u-bo.com/替代圖片文件名 [R,L]
source:http://u-bo.com/howt...