现在的位置: 首页 > 综合 > 正文

Apache Web Server——RewriteRule

2012年05月30日 ⁄ 综合 ⁄ 共 2908字 ⁄ 字号 评论关闭

Apache Web Server——RewriteRule

作者:张桂权

(摘自《

正则表达式袖珍手册》一书。译者,张桂权。可以从http://download.csdn.net/source/346896下载完整的译稿。如果感觉不错就去买一本原版的书吧,Regular Expression Pocket Reference,支持原书的作者。看PDF文件也是很累的。看完之后别忘了,给我提宝贵意见哦。谢谢。ajax.mailer@gmail.com)


       重写引擎强化了基于正则表达式的URLs重写。这个功能通过RewriteEngine On定向来实现。绝大多数的重写是单行的RewriteRule或一个RewriteCond紧跟一个RewriteRule的联合。

 

RewriteRule pattern substitution [[FLAG1, FLAG2, ...]]

       如果URLpattern成功匹配,那么把URL重写为substitutionsubstitution可以包含RewriteRule模式的回引($N),最后匹配的RewriteCond模式的回引(%N),以及规则中条件测试字符串(test-strings)中的一些变量(%{VARNAME}),和映射函数调用(${mapname:key|default})。表53中列出的可选标识,当匹配发生时引发服务器的一系列行为。

 

ReeorteCond teststring pattern

       为了应用一个RewriteRule,定义一个测试条件(表54)。RewriteRule前面的多个RewriteCond之间通过隐含的AND来连接,除非被指定为OR teststring可以包含RewriteRule模式的回引($N),最后匹配的RewriteCond模式的回引(%N),以及规则中条件测试字符串(test-strings)中的一些变量(%{VARNAME}),和映射函数调用(${mapname:key|default})。

 

       55中列出了对重写有影响的一些变量。

 

Apache RewriteRule标识

模式

模式描述

C

下一个规则的链(chain)。如果规则匹配,则实行重写,以及紧接的被链的重写,否则中止链。

CO=NAME:VAL:domain

[:lifetime[:path]]

设置cookie

E=VAR:VAL

设置一个环境变量

F

禁止;发送403代码

G

已经转移;发送401代码

H=Content-handler

发送内容的操作者

L

最后的规则;不使用任何更多的重写规则。

N

下一个规则;在新的重写URL中使用这个规则。

 

54  Apache RewriteRule标识


 

 

Apache RewriteRule标识(续)

模式

模式描述

NC

没有大小写;使用大小写不敏感的匹配。

NE

URL转义规则的应用程序不能对规则的输出进行转义

NS

如果请求是内部的子请求,则跳过处理

P

停止重写处理,转而处理一个内部代理请求的结果

PT

转移到下一个操作者,设置请求结构,这样Alias,ScriptAliasRedirect可可以作用于结果。

QSA

填充查询字符串

R[=Code]

重定向到一个新的URL可选码。默认码为302

S=num

跳过后续的num个规则。

T=MIME-type

设置MIME类型

 

54  Apache RewriteRule标识(续)

 

Apache RewriteCond标识

模式

模式描述

NC

没有大小写;使用大小写不敏感的匹配。

OR

用一个局部的OR来连接规则条件,而不是隐含的AND

 

55 Apache RewriteCond标识

 

Apache Server 变量

HTTP头部

连接和请求

HTTP_USER_AGENT

REMOTE_ADDR

HTTP_REFERER

REMOTE_HOST

HTTP_COOKIE

REMOTE_PORT

HTTP_FORWARDED

REMOTE_USER

HTTP_HOST

REMOTE_IDENT

HTTP_PROXY_CONNECTION

REQUEST_METHOD

HTTP_ACCEPT

SCRIPT_FILENAME

Server internals

PATH_INFO

DOCUMENT_ROOT

AUTH_TYPE

 

56  Apache Server 变量


 

Apache Server 变量(续)

HTTP头部

连接和请求

SERVER_ADMIN

Date and time

SERVER_ADDR

TIME_YEAR

SERVER_PORT

TIME_MON

SERVER_PROTOCOL

TIME_DAY

Special

TIME-MIN

API_VERSION

TIME_WDAY

THE_REQUEST

TIME

REQUEST_URI

 

REQUEST_FILENAME

 

IS_SUBREQ

 

HTTPS

 

 

56  Apache Server 变量(续)

 

 

Matching Directives

       另外一些Apache命令有效的利用了正则表达式。以下是最通用的几个命令。

 

AliasMatch pattern file-path|directory-path

       URLs映射到文件系统的一个位置。使用子匹配变量$1...$n来访问文件路径结果中的子匹配。

 

<DirectoryMath pattern>...</DirectiryMatch>

       当文件系统目录匹配pattern时,使用最近的一个定向。

 

<FilesMatch pattern>...</FilesMatch>

       当文件匹配pattern时,使用最近的一个定向。

 

<LocationMatch pattern>...</LocationMatch>

       URL匹配pattern时,使用最近的一个定向。

 

<ProxyMatch pattern>...</ProxyMatch>

       URL匹配pattern时,使用最近的一个定向。

 

实例

实例31 简单匹配

 

实例31 简单匹配

# Rewrite /foo to /bar

RewriteEngine On

RewriteRule ^/foo$ /bar

 

 

实例32 匹配和归组

 

实例32匹配和归组

# Rewrite pretty url as script parameters

RewriteRule ^/(/w+)/(/d+) /index.php?action=$1&id=$2

 

 

实例33 重写条件

 

实例33 重写条件

# Limit admin url to internal IP addresses

 

RewriteCond %{REMOTE_ADDR} !192.168./d*./d*

RewriteCond %{PATH_INFO} ^admin

RewriteRule .* - [F]

 

 

实例34 重定向

 

实例34重定向

# Make sure admin urls are served over SSL

RewriteCond %{SERVER_PORT} !^443$

RewriteRule ^/admin/(.*)$ https://www.example.com/admin/$1

[L,R]

 

抱歉!评论已关闭.