WordPress中.htaccess的使用技巧

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

如下是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模块。css

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

RewriteCond表示重写URL应知足的一些条件,RewriteRule 后面的第一个参数表示要重写的URL知足的规则(正则表达式),第二个参数表示重写后的URL。最后的那个[L]表示代表当前规则是最后一条规则,中止分 析之后规则的重写。(方框内还能够支持不少其它参数,咱们会在下面介绍)前端

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

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

从这里咱们能够看出,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时必定要当心,由于一但写错,极可能致使整个网站都没法访问。

相关文章
相关标签/搜索