htaccess在WordPress中的一些使用技巧总结

域名跳转

有些时候,我们会想把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]

网上寻找整理的资料 其实不止适合wordpress站,其他只要支持htaccess的服务器上的网站都可以用。