一、防盗链功能

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]) 只匹配一位的数字。

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

四、重定向RSS地址到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

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

原文链接:http://www.suoyishuo.com/archives/how-to-write-htaccess-rewrite.html

四个例子实战讲解.htaccess文件rewrite规则(转)的更多相关文章

  1. linux下的php网站放到Windows服务器IIS下导入 .htaccess文件伪静态规则转换 (wordpress)

    需要特别注意的是: 1. .htacdess文件在 wordpress中 是可以生成的 安装 WP Super Cache后,开启该插件>>设置>>高级>>找到并点 ...

  2. linux下的php网站放到Windows服务器IIS下.htaccess文件伪静态规则转换

    此办法只适合于linux下的php网站放到Windows服务器IIS下 ,  网站除了主页面正常以外  子页面全部出现404错误    这里子页面出现404 错误是说明伪静态没有开启 什么是.htac ...

  3. php .htaccess文件使用详解

    1..htaccess文件使用前提 .htaccess的主要作用就是实现url改写,也就是当浏览器通过url访问到服务器某个文件夹时,作为主人,我们可以来接待这个url,具体地怎样接待它,就是此文件的 ...

  4. Apache .htaccess文件

    今天在将ThinkPHP的URL模式由普通模式(URL_MODE=1)http://localhost/mythinkphp/index.php/Index/user/id/1.html改为重写模式 ...

  5. 让apache支持htaccess文件

    第一:检测 apache是否开启mod_rewrite 通过php提供的phpinfo()函数查看环境配置,在"apache2handler -> Loaded Modules&quo ...

  6. Apache伪静态(Rewrite).htaccess文件详解

    Htaccess(超文本访问)是一个简单的配置文件,它允许设计师,开发者和程序员通过它来改变Apache Web服务器的配置.这些功能包括用户重定向.URL重写(url rewrite,国内很多称为伪 ...

  7. apache配置rewrite及.htaccess文件(转载)

    今天看到一个哥们的帖子发了个rewrite的帖子,以前也写过一个,配置挺简单的,但当时没注意这个问题,当时没有用到.htaccess文件,在机子上测试了一下,发现确实没法用,于是开始找问题的所在. 自 ...

  8. windows下创建.htaccess文件之讲解

    如果想在Windows操作系统下新增一个.htaccess 文件实现对页面的rewrite,任你如何右点鼠标或者选文件->新增去新增都不会成功的,Windows都会要求给个文件名称.如果你想通过 ...

  9. .htaccess文件讲解

    .htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户 ...

随机推荐

  1. 什么时候使用try-catch

    上篇文章叙述了try-catch的效率问题,以及StackOverflow上各路大神们指出使用try-catch应该注意的一些问题. 这篇文章作为补充,转述下StackOverflow上各路大神对于何 ...

  2. Microsoft Edge 首个 Chromium 内核版释出

    翻译功能释出 navigator.userAgent"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, ...

  3. Windows 安装 MySQL8

    MySQL8下载地址:https://dev.mysql.com/downloads/mysql/ 解压到安装目录 新建配置文件my.ini [mysqld]# 设置mysql的安装目录basedir ...

  4. CommonsMultipartFile---用Spring实现文件上传

    CommonsMultipartFile Spring提供的读取文件的类,使用方便,依赖spring-web-3.1.2.RELEASE.jar 包路径: java.lang.Object org.s ...

  5. oc与swift比较

    swift试是用语言层面的雕虫小技和oc的机制大道进行pk. 从整体上来说,oc是一个更加优秀的语言.

  6. JWT加密

    JWT是一种加密算法,为了防止请求的信息在传输途中被拦截修改 JWT的引用: install-package jwt JWF由三部分组成:Header,Payload,Signature Payloa ...

  7. HDU 1086 You can Solve a Geometry Problem too( 判断线段是否相交 水题 )

    链接:传送门 题意:给出 n 个线段找到交点个数 思路:数据量小,直接暴力判断所有线段是否相交 /*************************************************** ...

  8. JS侧边栏实现

    <!DOCTYPE html> <html lang="en"> <style> </style> <head> < ...

  9. 【codeforces 733F】Drivers Dissatisfaction

    [题目链接]:http://codeforces.com/problemset/problem/733/F [题意] 给你n个点m条边; 让你从中选出n-1条边; 形成一个生成树; (即让n个点都联通 ...

  10. Java代码实现MySQL数据库的备份与还原

    通常在MySQL数据库的备份和恢复的时候,多是采用在cmd中执行mysql命令来实现. 例如: mysqldump -h127.0.0.1 -uroot -ppass test > d:/tes ...