12

Apache Rewrite规则(伪静态)实例

1.Rewrite规则简介

Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。

基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。

基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性(httpd.conf中的Option FollowSymLinks)且在.htaccess里要声明RewriteEngine on。

2. Apache mod_rewrite规则中的标记含义

==常用变量:

详细变量介绍,查看>>Apache Rewrite服务器常用变量汇总

%{QUERY_STRING} URL参数(Query String)是URL里面“?”后面的部分,它通常用于传输参数给CGI脚本或者其它动态页面。在Apache中,该值存储在环境变量QUERY_STRING中(在PHP中,可以通过$_SERVER['QUERY_STRING']访问到),是Apache定义的“变量=值”向量(数组)。 在Apache中,大多对URL进行操作的指令,如、Redirect、Alias和RewriteRule,都不能直接访问该数据;不过,mod_rewrite模块却可以对URL参数进行添加、删除和修改。其中的关键就是使用RewriteCond来匹配%{QUERY_STRING}变量,如果需要的话,还可以使用[QSA]标志来附加URL参数。

%1、%2…%n 是反向引用,来自之前的RewriteCond中正则表达式的匹配结果

%{HTTP_HOST} 保存主机头信息,也就是当前访问的域名,即“http://”和之后第一个“/”之间的内容。如果访问地址是http://www.mrdede.com/aaa,则%{HTTP_HOST}=www.mrdede.com;如果访问http://cdn.www.mrdede.com/,%{HTTP_HOST}=cdn.www.mrdede.com

%{SERVER_PORT} 默认情况下直接输出apache的配置文件httpd.conf中的ServerName值

httpd.conf配置如下:

客户端访问域名www.mrdede.com
%{HTTP_HOST} = www.mrdede.com
%{SERVER_NAME} = mrdede.com
所以,在实际程序中,应尽量使用%{HTTP_HOST} ,比较保险和可靠。

%{SERVER_PORT} 端口号

%{REQUEST_URI} 假设访问地址为http://mrdede.com/aaa/index.php?b=1&c=2,则%{REQUEST_URI}的值是http://mrdede.com后面包含正斜杠“/”在内的内容,即%{REQUEST_URI}=/aaa/index.php?b=1&c=2

%{HTTP_USER_AGENT} 是User-agent信息

 

==指令:

RewriteBase 定义了重写基准目录。

  • 例如,如果你将虚拟站点设置在/var/www目录下,删除这行将会导致重定向到http://mrdede.com/var/www/1.php。显然这是找不到的,而且你也不会希望用户看见你的服务器的目录结构。
  • 再举个例子,如果RewriteBase /base/,那么将会重定向到http://mrdede.com/base/1.php。

 

3.目录级(.htaccess)实例说明 Continue reading