Apache模块mod_rewrite
来源:互联网 发布:兼职在家做数据录入 编辑:程序博客网 时间:2024/04/30 08:20
摘要
mod_rewrite模块使用一个基于规则的重写引擎,基于PCRE正则表达式解析器,来动态的重写请求URLs。通常,mod_rewrite映射一个URL到一个问及那系统的路径。然而,他同样可以用来重定向一个URl到另一个URL,或者调用一个内部的代理获取。mod_rewrite提供了一个灵活强大的方式来操作URL,使用规则数目不限制。每个规则拥有数目不限的附属规则条件,可以是你通过基于服务变量,环境变量,HTTP头或者时间戳来重写URL。mod_rewrite对全URL路径进行操作,包括path-info部分。一个重写规则可以在httpd.conf中调用,或者在.htaccess中。重写规则产生的路径可以包括一个查询字符串,导致内部子处理,外部请求重定向,内部代理的吞吐量。
日志
mod_rewrite提供了trace1到trace8日志级别的详细日志行为。日志级别可以被mod_rewrite的LogLevel指令特别设置。达到debug级别是,不记录行为,trace8表示记录所有行为。
使用高的日志跟踪级别将大幅减慢Apache HTTP Server。使用高于trace2级别的日志水平只用于调试。
示例:
LogLevel alert rewrite:trace3
RewriteLog
和早期mod_rewrite版本像是,可以查看RewriteLog和RewriteLogLevel指令。这一功能已经完全被上面提到的新的 per-module日志配置代替。获得mod_rewrite特定色日志消息,通过日志文件管道grep:
tail -f error_log|fgrep '[rewrite:'
RewriteBase 指令
Description: Sets the base URL for per-directory rewrites
Syntax: RewriteBase URL-path
Default: None
Context: directory, .htaccess
Override: FileInfo
Status: Extension
Module: mod_rewrite
RewriteBase指令指定了URL前缀,总目录(htaccess)RewriteRule指令用来替代相对路径。当你使用相对路径在上下文中代替总目录(htaccess)时,除非以下任何条件为真,该指令是必须的:
- 源请求,代替在DocumentRoot下(和其他可到达的方式相对应,如Alias)。
- 文件路径的目录包含RewiteRule,通过相关的替代添加后缀,而且是服务器上有效的到URL路径(这比较少见)。
- 在Apache HTTP Server2.4.16及以后版本,该指令通过Alias、mod_userdir映射时可以省略。
在下面的例子中,RewriteBase对于避免重写到 http://example.com/opt/myapp-1.2.3/welcome.html是必须的,因为源没有和document root相关。这个配置错误通常造成服务寻找document root下面的“opt”目录。
DocumentRoot "/var/www/example.com"
AliasMatch "^/myapp" "/opt/myapp-1.2.3"
<Directory "/opt/myapp-1.2.3">
RewriteEngine On
RewriteBase "/myapp/"
RewriteRule "^index\.html$" "welcome.html"
</Directory>
RewriteCond指令
Description: Defines a condition under which rewriting will take place
Syntax: RewriteCond TestString CondPattern [flags]
Context: server config, virtual host, directory, .htaccess
Override: FileInfo
Status: Extension
Module: mod_rewrite
RewriteCond指令定义了一个规则限制。一个或多个RewriteCond可以放置在RewriteRule前面。当前URI的状况匹配他的模式并且这些条件都符合,以下规则才可以使用。
TestString是一个包括了下面扩展结构除了纯文本的字符串。
RewriteRule反向引用:这些是固有的反向引用格式$N(0<=N<=9),$1到$9提供到该结构分组部分(在圆括号里)的访问。RewriteRule首当前的RewriteCond设置条件管控。0$提供整个匹配的字符串的访问。
RewriteCond方向引用: 这些是固有的反向引用格式%N(0<=N<=9) 。1%到9%提供该结构(从当前条件设置中匹配的 最后一个RewriteCond)分组部分(同样是圆括号)的访问。%0提供整个匹配字符串的访问。
RewriteMap扩展:扩展的固有格式${mapname:key|defaul}。查看 the documentation for RewriteMap获取更多细节。
Server_variables:变量的固有格式%{NAME_OF_VARIABLE},NAME_OF_VARIABLE可以是以下列表的字符串:
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_REFERER
HTTP_USER_AGENTAUTH_TYPE
CONN_REMOTE_ADDR
CONTEXT_PREFIX
CONTEXT_DOCUMENT_ROOT
IPV6
PATH_INFO
QUERY_STRING
REMOTE_ADDR
REMOTE_HOST
REMOTE_IDENT
REMOTE_PORT
REMOTE_USER
REQUEST_METHOD
SCRIPT_FILENAME
SCRIPT_GROUP
SCRIPT_USER
SERVER_ADDR
SERVER_ADMIN
SERVER_NAME
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARETIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIMEAPI_VERSION
CONN_REMOTE_ADDR
HTTPS
IS_SUBREQ
REMOTE_ADDR
REQUEST_FILENAME
REQUEST_SCHEME
REQUEST_URI
THE_REQUEST
这些变量与HTTP MIME-headers,Apache HTTP Server的C变量,Unix系统的tm字段结构这些相似的命名相符。大都文档在这里或是手册的其他地方或是CGI说明书!
SERVER_NAME和SERVER_PORT分别依赖于UseCanonicalName和UseCanonicalPhysicalPort的值。
0 0
- Apache模块 mod_rewrite
- Apache模块mod_rewrite详解
- apache添加mod_rewrite模块
- Apache mod_rewrite模块配置
- 开启Apache mod_rewrite模块
- Apache模块 mod_rewrite
- Apache模块mod_rewrite
- apache安装/编译mod_rewrite模块
- Apache - 模块 - mod_rewrite - RewriteRule - 示例
- apache安装/编译mod_rewrite模块
- Apache的Mod_Rewrite模块设置
- 关于Apache的mod_rewrite模块
- 安装apache的mod_rewrite模块
- 给apache安装mod_rewrite模块
- Linux apache 添加 mod_rewrite模块
- Linux apache 添加 mod_rewrite模块
- Linux apache 添加 mod_rewrite模块
- Apache模块详解-mod_rewrite重写模块
- 黑板课爬虫闯关第一关
- HTML5 localStorage
- 第十七课 弱引用table
- eclipse代码自动提示
- Android中的OutOfMemoryError
- Apache模块mod_rewrite
- iOS多线程之Pthread/NSthread
- nova 创建虚拟机
- 解决C#后台返回json数据双引号转义为"问题
- 找出数组中两个数之和为指定的数
- PHP页面跳转几种实现技巧
- 70年后,你的房子面临怎样的命运
- Jquery easyui tabs 指定显示tabs页
- socket.io做成的一个群聊的dome