一.首先来看下mod_rewrite简介和配置
Rewrite主要功能就是实现URL的跳转和隐藏真实地址,其实还有另一个重要功能就是sef(Search Engine Friendly),基于Perl正则表达式规范。可以帮助我们实现 伪静态、 伪目录、域名跳转、防盗链等。
1. 伪静态举例:
比如一个普通的地址为:www.xxx.com/test.php?id=2
可以转成: www.xxx.com/test_2.html 或 www.xxx.com/test_2/
2.如何开启mod_rewrite,Apache该如何配置呢?
首先启用rewrite
# LoadModule rewrite_module modules/mod_rewrite.so
去除前面的 #
LoadModule rewrite_module modules/mod_rewrite.so
AllowOverride None 修改为: AllowOverride All
之后启用.htaccess,一般放在网上根目录中,并定义规则,当然这个规则也可以直接写在httpd.conf中。
二.mod_rewrite规则的使用
案例1:
RewriteEngine on #启动rewrite
RewriteCond %{HTTP_HOST} !^www.xxx.com [NC] #如果头部不等于www.xxx.com,则匹配下面规则 ,NC表示不区分大小写
RewriteRule ^/(.*) http://www.xxx.com/ [L] #即上面不匹配,则跳转到www.xxx.com
这个通常也是一个基本的防盗链的一个方法
案例2: 伪静态
RewriteEngine on //启动rewrite
RewriteRule ^/test([0-9]*).html$ /test.php?id=$1
RewriteRule ^/new([0-9]*)/$ /new.php?id=$1 [R]
前面红色部分与后面的红色部分相对应,会被替换。
三. mod_rewrite规则修正符
R 强制外部重定向 -->即最终会跳到真实地址
F 禁用URL,返回403HTTP状态码 -->即匹配成功,即返回403状态码无权限访问
G 强制URL为GONE,返回410状态码。-->告诉搜索引擎,即让搜索引擎无需再来访问这个地址
P 强制使用代理转发
L 表明当前规则是最后一条规则,停止分析以后的规则 --> 也即如果匹配到,则停止分析其后面的规则
N 重新从第一条规则开始运行重写过程。
C 与下一条规则关联。---->可能一条规则完成不了,需要与下一条规则配合使用
如果规则匹配则正常处理,以下修正符无效:
T=MIME-TYPE(force MIME type)强制MIME类型
NS 只用于不是内部子请求
NC 不区分大小写
QSA 追加请求字符串
NE 不在输出转义特殊字符 \%3d$1等价于=$1
PS:基本上粗部分为最正常使用的。