您的位置:首页 > 运维架构 > Apache

apache配置mod_rewrite url重写相关

2014-03-15 17:43 176 查看


Apache模块 mod_rewrite

说明一个基于一定规则的实时重写URL请求的引擎
状态扩展(E)
模块名rewrite_module
源文件mod_rewrite.c
兼容性仅在 Apache 1.3 及以后的版本中可用


概述

此模块提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求。它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则的灵活而且强大的URL操作机制。此URL操作可以依赖于各种测试,比如服务器变量、环境变量、HTTP头、时间标记,甚至各种格式的用于匹配URL组成部分的查找数据库。
此模块可以操作URL的所有部分(包括路径信息部分),在服务器级的(
httpd.conf
)和目录级的(
.htaccess
)配置都有效,还可以生成最终请求字符串。此重写操作的结果可以是内部子处理,也可以是外部请求的转向,甚至还可以是内部代理处理。
但是,所有这些功能和灵活性带来一个问题,那就是复杂性,因此,不要指望一天之内就能看懂整个模块


ReWriteBase

说明设置目录级重写的基准URL
语法
RewriteBase URL-path
默认值
参见使用方法
作用域directory, .htaccess
覆盖项FileInfo
状态扩展(E)
模块mod_rewrite
# /abc/def/.htaccess -- /abc/def 目录的配置文件
# 注意:/abc/def 是 /xyz 的物理路径(例如存在一条'Alias /xyz /abc/def'指令)。

RewriteEngine On

# 让服务器知道我们使用的是 /xyz 而不是物理路径 /abc/def
RewriteBase   /xyz

# 重写规则
RewriteRule   ^oldstuff\.html$  newstuff.html


上述例子中,对
/xyz/oldstuff.html
的请求被正确地重写为对物理文件
/abc/def/newstuff.html
的请求。


仅供Apache Hacker们参考

以下列出了内部处理的详细步骤:
请求:
/xyz/oldstuff.html

内部处理过程:
/xyz/oldstuff.html     -> /abc/def/oldstuff.html  (per-server Alias)
/abc/def/oldstuff.html -> /abc/def/newstuff.html  (per-dir    RewriteRule)
/abc/def/newstuff.html -> /xyz/newstuff.html      (per-dir    RewriteBase)
/xyz/newstuff.html     -> /abc/def/newstuff.html  (per-server Alias)

结果:
/abc/def/newstuff.html


虽然这个过程看来很繁复,但是由于目录级重写的到来时机已经太晚了,它不得不把这个(重写)请求重新注入到Apache核心中,所以Apache内部确实是这样处理的。但是:它的开销并不象看起来的那样大,因为重新注入完全在Apache服务器内部进行,而且这样的过程在Apache内部也为其他许多操作所使用。所以,你可以充分信任其设计和实现是正确的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  服务器