Apache rewrite_mod模块介绍
mod_rewrite是个强大高效的模块,它提供了操作URL的方法,可以重写任何类型的
URL。
对于通常的URL操作任务,并不需要使用rewrite_mod模块;例如简单的任务可以使用
mod_alias;
在使用mod_rewrite模块之前,配置mod_rewrite日志级别为跟踪级别,使用LogLevel指
令。
正则表达式:
提供最基本的构建模块用于书写正则表达式和RewriteRules.
字符 意义 案例
. 匹配单个字符 a.t匹配act, aat, adt等
+ 重复前一个字符一到多次 a+匹配aa, aaa, aaaa等
* 重复前一个字符零到多次 a*匹配a, aa, aaa等
? 选择匹配,可匹配也可不匹配前一个字符 colou?r匹配colour和color
^ 前置勾,匹配开始字符 ^a匹配以a开头的字符
$ 后置勾,匹配最后字符 a$匹配以a结尾的字符
() 组合多个字符为一个单元 (ab)+匹配(ab)这个单元符
[] 一个字符类,匹配其中某个字符 a[cuad]t匹配act. aut, aat和adt
[^] 反转字符类,匹配指定字符之外的字符 a[^a]匹配除a之外的字符
正则后引用变量:
当在模式或条件模式中使用圆括号,将内部创建后引用变量,可使用$n或%n引用后变量;
$n引用模式中的后变量,%n引用条件模式中的后变量
案例
RewriteCond %{DOCUMENT_ROOT}/$1 !-f
RewriteCond %{HTTP_HOST} ^(admin.example.com)$
RewriteRule ^/?([a-z]+)/(.*)$ /admin.foo?page=$1&pid=$2&host=%1 [PT]
$1 -- ([a-z]+) $2 -- (.*) %1 -- (admin.example);
RewriteRule基础:
格式:模式字符 替换字符 标志;
模式字符是正则表达式;
替换字符:(1)资源的文件系统路径;(2):网页路径;
(3)绝对路径;(4)可包含后引用
标志:
标志用[]包含,每个标志都简写形式
L:如果规则匹配,停止下一条rule处理;
NC:大小写不敏感;
P:请求由mod_proxy处理
NE:对特殊字符不转换处理
R:重定向;
S:忽略;
T:设定MIME类型发送给客户端
F:服务器返回403状态给客户端;
G:在回复中包含410 GONE状态码;
H:设置查询请求句柄为指定句柄
RewriteCond语法:
给定一条或多条RewriteCond指令来限制请求类型,参数1为请求的字符描述变量;
参数2为正则表达式;
案例:指令请求IP返回
RewriteCond "%{REMOTE_ADDR}" "^10\.2\."
RewriteRule "(.*)" "http://exmaple.com$1"
rewriting通常写在服务器配置文件,用<Directory>或者<VirtualHost>包含。
在复杂情况下写在.htaccess文件中
mod_rewrite是个强大高效的模块,它提供了操作URL的方法,可以重写任何类型的
URL。
对于通常的URL操作任务,并不需要使用rewrite_mod模块;例如简单的任务可以使用
mod_alias;
在使用mod_rewrite模块之前,配置mod_rewrite日志级别为跟踪级别,使用LogLevel指
令。
正则表达式:
提供最基本的构建模块用于书写正则表达式和RewriteRules.
字符 意义 案例
. 匹配单个字符 a.t匹配act, aat, adt等
+ 重复前一个字符一到多次 a+匹配aa, aaa, aaaa等
* 重复前一个字符零到多次 a*匹配a, aa, aaa等
? 选择匹配,可匹配也可不匹配前一个字符 colou?r匹配colour和color
^ 前置勾,匹配开始字符 ^a匹配以a开头的字符
$ 后置勾,匹配最后字符 a$匹配以a结尾的字符
() 组合多个字符为一个单元 (ab)+匹配(ab)这个单元符
[] 一个字符类,匹配其中某个字符 a[cuad]t匹配act. aut, aat和adt
[^] 反转字符类,匹配指定字符之外的字符 a[^a]匹配除a之外的字符
正则后引用变量:
当在模式或条件模式中使用圆括号,将内部创建后引用变量,可使用$n或%n引用后变量;
$n引用模式中的后变量,%n引用条件模式中的后变量
案例
RewriteCond %{DOCUMENT_ROOT}/$1 !-f
RewriteCond %{HTTP_HOST} ^(admin.example.com)$
RewriteRule ^/?([a-z]+)/(.*)$ /admin.foo?page=$1&pid=$2&host=%1 [PT]
$1 -- ([a-z]+) $2 -- (.*) %1 -- (admin.example);
RewriteRule基础:
格式:模式字符 替换字符 标志;
模式字符是正则表达式;
替换字符:(1)资源的文件系统路径;(2):网页路径;
(3)绝对路径;(4)可包含后引用
标志:
标志用[]包含,每个标志都简写形式
L:如果规则匹配,停止下一条rule处理;
NC:大小写不敏感;
P:请求由mod_proxy处理
NE:对特殊字符不转换处理
R:重定向;
S:忽略;
T:设定MIME类型发送给客户端
F:服务器返回403状态给客户端;
G:在回复中包含410 GONE状态码;
H:设置查询请求句柄为指定句柄
RewriteCond语法:
给定一条或多条RewriteCond指令来限制请求类型,参数1为请求的字符描述变量;
参数2为正则表达式;
案例:指令请求IP返回
RewriteCond "%{REMOTE_ADDR}" "^10\.2\."
RewriteRule "(.*)" "http://exmaple.com$1"
rewriting通常写在服务器配置文件,用<Directory>或者<VirtualHost>包含。
在复杂情况下写在.htaccess文件中