帮助中心FAQ

规则介绍

RewriteEngine On|Off

RewriteEngine 用于开启或停用rewrite功能

 

RewriteBase URL-path

重定向URL路径,一般未写RewriteBase ’/’

 

RewriteCond TestString CondPattern [flags]

1、RewriteCond:

  指令定义了一个规则的条件,即,在一个RewriteRule指令之前有一个或多个RewriteCond指令。

条件之后的重写规则仅在当前URI与pattern匹配并且符合这些条件的时候才会起作用。

2、TestString:

  是一个纯文本的字符串,但是还可以包含下列可扩展的成分:

3、RewriteRule反向引用:

  引用方法是 $N  (0 <= N <= 9) 引用当前(带有若干RewriteCond指令的)RewriteRule中的 与pattern匹配的分组成分(圆括号!)。

4、RewriteCond反向引用:

  引用方法是 %N  (1 <= N <= 9) 引用当前若干RewriteCond条件中最后符合的条件中的分组成分(圆括号!)。

5、RewriteMap 扩展:

 引用方法是 ${mapname:key|default}

6、服务器变量:

  引用方法是 %{ NAME_OF_VARIABLE }  这个是我们最常使用到的功能

7、CondPattern:

  是条件pattern, 即, 一个应用于当前实例TestString的正则表达式, 即, TestString将会被计算然后与CondPattern匹配.

可以在pattern串中使用!字符(惊叹号)来实现匹配的反转。

8、flags 参见下表

 

 

服务器变量NAME_OF_VARIABLE具体数值见下表:

HTTP_USER_AGENT                  //主要用于检测访问者系统和浏览器等

HTTP_REFERER                     //从哪个页面链接过来

HTTP_COOKIE

HTTP_FORWARDED

HTTP_HOST                        //域名

HTTP_PROXY_CONNECTION

HTTP_ACCEPT                      

REMOTE_ADDR

REMOTE_HOST

REMOTE_USER

REMOTE_IDENT

REQUEST_METHOD

SCRIPT_FILENAME

PATH_INFO

QUERY_STRING

AUTH_TYPE

DOCUMENT_ROOT

SERVER_ADMIN

SERVER_NAME

SERVER_ADDR

SERVER_PORT

SERVER_PROTOCOL

SERVER_SOFTWARE

TIME_YEAR

TIME_MON

TIME_DAY

TIME_HOUR

TIME_MIN

TIME_SEC

TIME_WDAY

TIME

API_VERSION                      //这是正在使用的httpd中(服务器和模块之间内部接口)的Apache模块API的版本, 其定义位于include/ap_mmn.h中。此模块版本对应于正在使用的Apache的版本 (比如,在Apache 1.3.14的发行版中,这个值是19990320:10)。 通常,对它感兴趣的是模块的作者。

THE_REQUEST                      //这是由浏览器发送给服务器的完整的HTTP请求行。(比如, “GET /index.html HTTP/1.1″). 它不包含任何浏览器发送的附加头信息。

REQUEST_URI                      //这是在HTTP请求行中所请求的资源。

REQUEST_FILENAME                 //这是与请求相匹配的完整的本地文件系统的文件路径名或描述.

IS_SUBREQ                        //如果正在处理的请求是一个子请求,它包含字符串”true”,否则就是”false”。 模块为了解析URI中的附加文件,有可能会产生子请求。

 

 

 

 Flags

RewriteRule标记

含 义

描 述

R

Redirect

发出一个HTTP重定向

F

Forbidden

禁止对URL地址的存取

G

Gone

标记URL地址不存在

P

Proxy

URL地址传递给mod_proxy

L

Last

停止处理接下来的规则

N

Next

再次重第一个规则开始处理,但是使用当前重写后的URL地址

C

Chain

将当前的规则和紧随其后的规则链接起来

T

Type

强制执行指明的MIME

NS

Nosubreq

只在没有任何内部子请求执行时运行本脚本

NC

Nocase

URL地址匹配对大小写不敏感

QSA

Qsappend

在新的URL地址后附加查询字符串部分,而不是替代

PT

Passthrough

将重写后的URL地址传递给另一个Apache模块进行进一步处理

S

Skip

忽略之后的规则

E

Env

设置环境变量

 

 

 

 

rewritecond的其他用法:

“-d”(目录)

    TestString视为一个路径名并测试它是否为一个存在的目录。

“-f”(常规文件)

    TestString视为一个路径名并测试它是否为一个存在的常规文件。

“-s”(非空的常规文件)

    TestString视为一个路径名并测试它是否为一个存在的、尺寸大于0的常规文件。

“-l”(符号连接)

    TestString视为一个路径名并测试它是否为一个存在的符号连接。

“-x”(可执行)

    TestString视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测。

“-F”(对子请求存在的文件)

    检查TestString是否为一个有效的文件,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!

“-U”(对子请求存在的URL)

检查TestString是否为一个有效的URL,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!

 

 

 

举例:

1图片重定向:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^localhost$    //如果域名是localhost

RewriteCond %{REQUEST_FILENAME} !-f     //并且访问的文件找不到

RewriteRule ^images/(.+) http://192.168.67.19/test/$1 [R=302,L]     //则跳转到另一个域名下的另一个目录访问这个图片

 

2二级域名重定向到www.baidu.com

rewriteEngine on

rewriteCond %{http_host} ^baidu.com [NC]

rewriteRule ^(.*)$ http://www.baidu.com/$1 [R=301,L]

 

3设置404错误

RewriteEngine on

RewriteCond %{REQUEST_URI} !/test.html$     //如果请求的地址不是test.html

RewriteCond %{REMOTE_ADDR} !^192.168.67.19       //访问ip如果不是这个

RewriteRule $ /404.html [R=302,L]                //则重定向到404.html这个升级提醒页面

 

4伪静态

RewriteEngine on

RewriteRule ^index.html$ index.php