实战讲解.htaccess文件之rewrite规则

.htaccess文件大家都不陌生吧。不认识的自己去搜一下……顺便告诉你,这是个好东西,值得一学。

似乎网上关于.htaccess编写方法的教程很有限,相信博主们也没有几个是自己写的吧?
我在这里就搜了几个常用规则,总结一下rewrite规则的用法。当然这只是.htaccess功能的一小部分,但是相当实用。
如果熟练掌握rewrite规则的编写,能够加强对网站URL的控制,对用户体验、SEO都十分有利。
 

注:所有规则来源于网络,我只作解释。

 

一、防盗链功能

1
2
3
4
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]

逐行讲解一下:
 

1.打开Rewrite功能。有可能服务器设置里已经是全局下打开了,但是多写也没事。
2.RewriteCond指令,定义生效条件,用于寻找匹配条件的地址。后面内容用正则表达式匹配。代表含义是发送的请求不由mysite.com而来,那就是盗链啦。末尾的[NC]代表忽略大小写。
3.发送请求的主机前缀不为空。
4.RewriteRule指令,定义重写规则,把匹配的地址按此规则重写。本例中把这些后缀为这些图片格式的,都替换到某一个图片下。[L]表示这是最后一段规则。

只这四行就实现了防盗链是不是很神奇(- -||),编写起来是不是又觉得复杂。
这里总结了几个常用参数(不是全部):

RewriteCond下:
[NC]
  不分字母大小写
[OR]  用于连接下一条规则

RewriteRule
下:
[R] 强制重定向,[R=code]
code默认为302
[F] 禁用URL,返回HTTP 403 错误
[L] 这是最后一条规则,之后内容无用

还有一篇关于正则表达式的教程(很详细):http://www.unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm

  

二、网址规范化

1
2
3
4
Options +FollowSymLinks
rewriteEngine on
rewriteCond %{http_host} ^yourdomain.com [NC]
rewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]

这个是把所有二级域名都重定向到www.yourdomain.com的例子,现在看来是不是很简单了?
需要注意的是,这里的Options +FollowSymLinks不是必须的,但在某些服务器如果不设置FollowSymLinks,可能引起500错误。

再来看一个好玩的重定向

1
2
3
4
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} (Googlebot)
RewriteRule ^ http://abc.com/ [R=301,L]

1.打开Rewrite功能。
2.RewriteBase指令,设置目录级重写的基准URL。可以理解成把该目录(这个.htaccess所在目录)假定为基准的URL前缀。本例中这样的写法无用。
3.RewriteCond指令。匹配所有USER_AGENT为Googlebot的发送请求。
4.RewriteRule指令。本例中把这些请求都重定向到了abc.com。

在本例中,这个配置应该是黑客所为,把google蜘蛛指向某个网站,等于伪造PR。

 

 

三、临时错误页面

当你的网站在升级、修改的时候,你最好让访客转到指定的页面,而不是没做完的页面或者是错误页。
这时我们做一个302转跳就好。

1
2
3
4
RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteRule $ /error.html [R=302,L]

1.继续打开Rewrite功能。- -|
2.REQUEST_URI请求的URL值。这里指所有访问maintenance.html页面的请求。
3.REMOTE_ADDR向服务器发送请求的IP地址。本例中此处应设为你自己的IP,这样就只有你能访问。
4.RewriteRule指令。本例中把这些请求都重定向到了error.html 。

在本例,我们总结几个常用的正则表达式和特殊符号。

(.*) 用于匹配某一区域内所有内容。如 abc/def/ghi 可用 (.*)\/(.*)\/(.*) 匹配。
([a-zA-Z_]+) 匹配英文单词,允许用-和_连接。
([0-9]+) 匹配多位数字,通常用于匹配ID。
([0-9]) 只匹配一位的数字。

^ 表示正则的开始
$ 表示正则的结束

 

 

四、重定向WordPress的RSS Feed链接地址到Feedburner地址

除了可以更改模板里的RSS地址外,.htaccess也能实现RSS地址的更改,并更加方便。

1
2
3
4
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !FeedBurner    [NC]
RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds2.feedburner.com/yourname [R=302,NC,L]

有了上面的总结,本例其实就很简单了吧。
唯一要注意的是这样操作要确保填写正确的HTTP_USER_AGENT。其实你不常换模板的话。。可能还是直接改模板更省事。

 

在最后,为懒虫们推荐几个好东东:
在线.htaccess生成器htaccessEditor
在线正则表达式检查器http://www.sman.cn/Blog/attachments/month_0711/320071117123354.html
mod_rewrite模块中文参考手册http://man.chinaunix.net/newsoft/Apache2.2_chinese_manual/mod/mod_rewrite.html

 

其实rewrite也只是APACHE一个模块而已,做到边查边写足矣,实在不行直接去搜一个规则也未尝不可。没有必要费太大力气去学。不过其中的正则表达式还是非常实用的,值得深入学习。

Related posts:

  1. .htaccess文件之rewrite规则实例 .htaccess文件相信大家都不陌生吧,不过网上关于.htaccess编写方法的教程很有限,也没有几个完全是博主自己写的。 我在这里就搜了几个常用规则,总结一下rewrite规则的用法。当然这只是.htaccess功能的一小部分,但是相当实用。 如果熟练掌握rewrite规则的编写,能够加强对网站URL的控制,对用户体验、SEO都十分有利。(注:所有规则来源于网络) 一、防盗链功能 RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]...
  2. 用.htaccess重写将主域名从网站根目录重新指向一个子目录 一个使用HostMonster(实际上应该是所有支持重写.htaccess文件的空间都可以通过次方法实现)的用户想将主域名指向其中一个文件夹/目录,问我会不会弄,我随即就说通过.htaccess重写就可以了,虽然对.htaccess有一定的了解,可是真正要实现这个功能的重写,还不知道具体怎么实现,尝试了几次都出现这样或那样的问题。无奈中~~只好上网寻找答案~~ 找这种答案还是很容易的,很快就在HostMonster的知识库里找到了,那里有一篇文章专门写如何用.htaccess重写将主域名指向一个子目录/文件夹。 在虚拟主机中,主域名是使用public_html目录/文件夹作为主域名的缺省目录,主域名网站的文件和程序都是放在public_html目录下,附加的域名(addon domains)使用public_html目录/文件夹下的子目录/子文件夹。有的人可能觉得public_html目录/文件夹下的会看起来比较乱,因此想把主域名也指向其中一个子目录/文件夹。这样就需要利用.htaccess的重写功能。 具体的写法如下: # .htaccess main domain to...
  3. 用.htaccess实现域名指向子目录功能 我购买的webhostingpad空间虽然支持Parked Domains(域名停靠)功能,但停靠的域名只能指向网站根目录即主域名(如我的http://roadh.net),如果想将域名(如http://xyc.pp.ru)停靠到我在此空间上建立的子网站(通过Addon Domains功能建立)(如http://xya.in)上,单靠cpanel控制面板提供的功能是无法实现的,好在该空间支持.htaccess文件重写功能,现就将实现方法介绍如下: 1、首先在xyc.pp.ru的dns中将其cname到xya.in上; 2、编辑网站根目录下.htaccess文件,添加如下内容: RewriteEngine on #让xyc.pp.ru 访问xya.in目录xya.in网站 RewriteCond...
  4. 用.htaccess 文件帮你逃离Feedsky的不稳定 托管 Feed 有很多好处,但这些好处都要基于一个前提 —— Feed 托管商足够强健。自从使用 Feedsky 以来我不但没有体验到好处,积攒的怨念倒是3天3夜都散不完。我谁也不赖。要怪就怪自己当时贪图小利,明知道 Feedsky 不好,冲着话题广告还是头也不回地上了船。要说在...
  5. WordPress博客添加ping服务器加快搜索引擎收录 ping服务对博客来说是件非常重要的工具,它可以在你发表文章后迅速通知搜索引擎,feed托管服务商和在线RSS阅读器更新。这对博客来说是相当重要的。这是我收集的ping服务器,网上的很多都是没有百度的服务器,我个人认为对中国博客来说还是比较有用的。(小知识:对于 Wordpress 用户,添加Ping 服务 RPC 端点很简单,只要在后台的撰写选项的更新服务中,把下面的那些添加进去就行了,当然也可以去掉几个,如果添加过多的话发布文章时会很慢。) http://ping.baidu.com/ping/RPC2     http://rpc.pingomatic.com/    ...

以上关联文章由 Yet Another Related Posts Plugin 提供支持。