有些用户可能还不知道.htaccess文件是什么,所以我们首先来说明一下htaccess的作用。在wordpress的根目录下,你会看到一个名为.htaccess的文件,它可以是由系统创建、也可以是用户自己编辑而成的。它是Apache服务器中的一个配置文件,它负责相关目录下的网页配置,对wordpress中实现永久链接(Permalink)至关重要。同时利用它,我们也可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。下面我们就来看看如何配制htaccess。

以下是Wordpress中默认的htaccess内容。我们一一来看一下每一行的作用。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L] </IfModule>

第一行用来判断Apache中是否安装了rewrite模块。如果存在rewrite模块,“RewriteEngine On” 则用来开启rewrite模块。

“RewriteBase /” 用来表示Apache要对URL重写的部分。比方站点为http://domain.com/。RewriteBase后面为“/”时,表示对主域名下面的所有子路径进行重写,如果是“/blog/” 是只会对http://domain.com/blog/后面的部分进行重写。

RewriteCond表示重写URL应满足的一些条件,RewriteRule 后面的第一个参数表示要重写的URL满足的规则(正则表达式),第二个参数表示重写后的URL。最后的那个[L]表示表明当前规则是最后一条规则,停止分析以后规则的重写。(方框内还可以支持很多其它参数,我们会在下面介绍)

所以“RewriteRule ^index\.php$ – [L]”表示若当前请求的URL恰好为index.php,则不要进行后面的判断了。

“RewriteCond %{REQUEST_FILENAME} !-f”和“RewriteCond %{REQUEST_FILENAME} !-d”表示当前的URL并不是一个文件(-f)或目录(-d)。当这两个条件同时满足时,最后一条“RewriteRule . /index.php [L]”会把所有请求都重写为index.php。

从这里我们可以看出,wordpress默认把所有不指到静态文件或目录的url全部重写到了index.php,然后由index.php统一处理请求。

刚才我们提到了[L]的作用,其实RewriteRule还支持很多其它参数,包括:

  • R 强制外部重定向,后面可以代301或302跳转。
  • F 禁用URL,返回403HTTP状态码。
  • G 强制URL为GONE,返回410HTTP状态码。
  • P 强制使用代理转发。
  • L 表明当前规则是最后一条规则,停止分析以后规则的重写。
  • N 重新从第一条规则开始运行重写过程。
  • C 与下一条规则关联。
  • T=MIME-type(force MIME type) 强制MIME类型。
  • NS 只用于不是内部子请求。
  • NC 不区分大小写。
  • QSA 追加请求字符串。
  • NE 不在输出转义特殊字符。

htaccess在Wordpress中的一些使用技巧

上面讲了一下Wordpress中.httaccess的基本用途,其实利用htaccess文件还可以帮助我们完成很多其它的工作。下面我来介绍其中一些常用的功能,更多的读者可以自己去尝试。

域名跳转

有些时候,我们会想把domain.com的域名全部跳转到www.domain.com下。这个时候htaccess就可以派上用场了。在.htaccess文件中添加类似下面的代码:(下面这段代码在网站更换域名时,也同样使用)
RewriteCond %{HTTP_HOST} ^domain\.com [NC] RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
类似的还可以用htacess也可以用来更换URL的目录结构,这个在Category名字被更换时特别有用:
RewriteRule ^/?old_directory/([a-z/.]+)$ new_directory/$1 [R=301,L]
注:R后面的301表示此跳转为永久跳转,也可以根据实际情况该成临时跳转(302)。

防盗链

图片的盗链可能是很多站长最为头痛的事情,自己的图片被人白白拿去不说,还会免费占用了自己网站的资源,使用htaccess文件同样可以实现防盗链的功能。代码如下:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://domain.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://domain.com$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.domain.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.domain.com$ [NC] RewriteRule .*\.(gif|jpg|jpeg|png|bmp|swf|mp3|wav|zip|rar)$ http://www.domain.com/404.html [R,NC]

这段代码会判断请求的referer,如果链接不是从本站点击过来的,默认都会跳转到一个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请求是否是由浏览器发出的(判断HTTP_USER_AGENT是否为空),并且Refer是否本站的,只要其中任意一个条件不满足,就将请求自动跳转到首页。

注意,这段代码只适用于Wordpress,其实的框架可以根据其具体情况把wp-comments-post修改成对应的URL。

只允许自己访问Wordpress的后台

如果你有一个固定的IP,那么你完全可以在htaccess中设定只有自己能访问Wordpress的后台。在wp-admin目录下建立一个新的.htaccess文件,里面写入如下代码:
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthType Basic
<LIMIT GET>
order deny,allow
deny from all

# xx.xx.xx.xx为您的IP,您也以设定多个IP。
allow from xx.xx.xx.xx
allow from xx.xx.xx.xxx
</LIMIT>

注:对于这段代码,一定是在wp-admin文件夹下建立新的htaccess,很多坑爹的文章都没有告诉你这一点,直接添加到网站根目录下的那个htacess下的话……您要是想要自己的整个网站都只能自己访问的话,不妨试试。

阻止某些IP访问自己的网站

如果有些垃圾网站的Robot总是不停的抓取你网站的数据,你可以在htaccess中屏蔽掉这些IP。
<Limit GET POST>
order allow,deny
deny from xx.xx.xx.xx
allow from all
</Limit>

类似的,更换一下deny和allow,可以实现只允许某些特定IP访问自己的网站,当然如果您真的想要这么做的话。

判断浏览器

浏览器兼容可以说是前端工程师最为心痛的事。与其在css中写各种hack,不如在htacess中判断浏览器,直接指向不同的css文件。
RewriteCond %{REQUEST_URI} index\.css*
RewriteCond %{HTTP_USER_AGENT} "^Mozilla/4.0$"
RewriteRule ^(.*)$ http://domain.com/firefox.css

类似的,利用htacess判断访问者是否持有的是移动设备也很容易。
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.domain.com/ [R,L]

因为有点多,为了方便阅读,还有通用的浏览器的USER_AGENT放在了文章的最后。有兴趣的读者去可以去看看吧。

禁止访问特定的文件类型或文件

有些特定的文件、或某些文件,我们可能不想让用户访问到,可以用如下代码:
<Files secretfile.jpg>
order allow,deny
deny from all
</Files>

<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
Order Allow,Deny
Deny from all
</FilesMatch>

判断浏览器的语言

想要根据浏览器的语言设定,跳转到不同的页面,可以用如下代码:
RewriteCond %{HTTP:Accept-Language} ^zh-cn.*$ [NC] RewriteRule ^/?$ index_cn.htm [R=301,L]

总结

就说到这里了,其实htaccess的用途还有很多很多,读者可以根据上面的例子自己去挖掘htaccess的新的用途。不过注意修改htaccess时一定要小心,因为一但写错,很可能导致整个网站都无法访问。

此致敬礼。

附录:部分通用的USER_AGENT

 

asterias BackDoorBot Black.Hole BlackWidow
BlowFish BotALot BuiltBotTough Bullseye
BunnySlippers Cegbfeieh CheeseBot CherryPicker
ChinaClaw CopyRightCheck cosmos Crescent
Custo DISCo DittoSpyder Download\ Demon
eCatch EirGrabber EmailCollector EmailSiphon
EmailWolf EroCrawler Express\ WebPictures ExtractorPro
EyeNetIE FlashGet Foobot FrontPage
GetRight GetWeb! Go-Ahead-Got-It Googlebot-Image
Go!Zilla GrabNet Grafula Harvest
hloader HMView httplib HTTrack
humanlinks ia_archiver Image\ Stripper Image\ Sucker
Indy\ Library InfoNaviRobot InterGET Internet\ Ninja
JennyBot JetCar JOC\ Web\ Spider Kenjin.Spider
Keyword.Density larbin LeechFTP LexiBot
libWeb/clsHTTP LinkextractorPro LinkScan/8.1a.Unix LinkWalker
lwp-trivial Mass\ Downloader Mata.Hari Microsoft.URL
MIDown\ tool MIIxpc Mister.PiX Mister\ PiX
moget Mozilla/2 Mozilla/3.Mozilla/2.01 Mozilla.*NEWT
Navroad NearSite NetAnts NetMechanic
NetSpider Net\ Vampire NetZIP NICErsPRO
NPBot Octopus Offline.Explorer Offline\ Explorer
Offline\ Navigator Openfind PageGrabber Papa\ Foto
pavuk pcBrowser ProPowerBot/2.14 ProWebWalker
ProWebWalker QueryN.Metasearch ReGet RepoMonkey
RMA SiteSnagger SlySearch SmartDownload
SpankBot spanner SuperBot SuperHTTP
Surfbot suzuran Szukacz/1.4 tAkeOut
Teleport Teleport\ Pro Telesoft The.Intraformant
TheNomad TightTwatBot Titan toCrawl/UrlDispatcher
True_Robot turingos TurnitinBot/1.5 URLy.Warning
VCI VoidEYE WebAuto WebBandit
WebCopier WebEMailExtrac.* WebEnhancer WebFetch
WebGo\ IS Web.Image.Collector Web\ Image\ Collector WebLeacher
WebmasterWorldForumBot WebReaper WebSauger Website\ eXtractor
Website.Quester Website\ Quester Webster.Pro WebStripper
Web\ Sucker WebWhacker WebZip Wget
Widow [Ww]eb[Bb]andit WWW-Collector-E WWWOFFLE
Xaldon\ WebSpider Xenu’s Zeus
分享到: 更多

说点什么

avatar
  Subscribe  
提醒