Apache伪静态资料Word下载.docx

上传人:b****2 文档编号:4451234 上传时间:2023-05-03 格式:DOCX 页数:41 大小:39.39KB
下载 相关 举报
Apache伪静态资料Word下载.docx_第1页
第1页 / 共41页
Apache伪静态资料Word下载.docx_第2页
第2页 / 共41页
Apache伪静态资料Word下载.docx_第3页
第3页 / 共41页
Apache伪静态资料Word下载.docx_第4页
第4页 / 共41页
Apache伪静态资料Word下载.docx_第5页
第5页 / 共41页
Apache伪静态资料Word下载.docx_第6页
第6页 / 共41页
Apache伪静态资料Word下载.docx_第7页
第7页 / 共41页
Apache伪静态资料Word下载.docx_第8页
第8页 / 共41页
Apache伪静态资料Word下载.docx_第9页
第9页 / 共41页
Apache伪静态资料Word下载.docx_第10页
第10页 / 共41页
Apache伪静态资料Word下载.docx_第11页
第11页 / 共41页
Apache伪静态资料Word下载.docx_第12页
第12页 / 共41页
Apache伪静态资料Word下载.docx_第13页
第13页 / 共41页
Apache伪静态资料Word下载.docx_第14页
第14页 / 共41页
Apache伪静态资料Word下载.docx_第15页
第15页 / 共41页
Apache伪静态资料Word下载.docx_第16页
第16页 / 共41页
Apache伪静态资料Word下载.docx_第17页
第17页 / 共41页
Apache伪静态资料Word下载.docx_第18页
第18页 / 共41页
Apache伪静态资料Word下载.docx_第19页
第19页 / 共41页
Apache伪静态资料Word下载.docx_第20页
第20页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Apache伪静态资料Word下载.docx

《Apache伪静态资料Word下载.docx》由会员分享,可在线阅读,更多相关《Apache伪静态资料Word下载.docx(41页珍藏版)》请在冰点文库上搜索。

Apache伪静态资料Word下载.docx

和高级 

URL 

文档,列举了许多基于URL的问题的实用方案,其中你可以找到真实有

用的规则集。

RewriteBase指令

说明设置目录级重写的基准URL

语法RewriteBaseURL-path

默认值参见使用方法

作用域directory,.htaccess

覆盖项FileInfo

模块mod_rewrite

RewriteBase指令显式地设置了目录级重写的基准URL。

在下文中,你将看到RewriteRule 

可以用于目录级的配置

文件中(.htaccess)并在局部范围内起作用,即规则实际处理的只是剥离了本地路径前缀的一部分。

处理结束后,这个

路径会被自动地附着回去。

默认值是"

RewriteBasephysical-directory-path"

在对一个新的URL进行替换时,此模块必须把这个URL重新注入到服务器处理中。

为此,它必须知道其对应的URL前缀

或者说URL基准。

通常,此前缀就是对应的文件路径。

但是,大多数网站URL不是直接对应于其物理文件路径的,因而

一般不能做这样的假定!

所以在这种情况下,就必须用RewriteBase指令来指定正确的URL前缀。

如果你的网站服务器URL不是与物理文件路径直接对应的,你必须在每个使用RewriteRule 

的.htaccess文件中使用

RewriteBase指令。

例如,目录级配置文件内容如下:

#/abc/def/.htaccess--/abc/def目录的配置文件

#注意:

/abc/def是/xyz的物理路径(例如存在一条'

Alias/xyz/abc/def'

指令)。

RewriteEngineOn

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

RewriteBase 

/xyz

#重写规则

RewriteRule 

^oldstuff/.html$ 

newstuff.html

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

仅供ApacheHacker们参考

以下列出了内部处理的详细步骤:

请求:

/xyz/oldstuff.html

内部处理过程:

/xyz/oldstuff.html 

->

/abc/def/oldstuff.html 

(per-serverAlias)

/abc/def/oldstuff.html->

/abc/def/newstuff.html 

(per-dir 

RewriteRule)

/abc/def/newstuff.html->

/xyz/newstuff.html 

RewriteBase)

/xyz/newstuff.html 

结果:

/abc/def/newstuff.html

虽然这个过程看来很繁复,但是由于目录级重写的到来时机已经太晚了,它不得不把这个(重写)请求重新注入到Apache核

心中,所以Apache内部确实是这样处理的。

但是:

它的开销并不象看起来的那样大,因为重新注入完全在Apache服务器

内部进行,而且这样的过程在Apache内部也为其他许多操作所使用。

所以,你可以充分信任其设计和实现是正确的。

RewriteCond指令

说明定义重写发生的条件

语法RewriteCondTestStringCondPattern[flags]

作用域serverconfig,virtualhost,directory,.htaccess

RewriteCond指令定义了规则生效的条件,即在一个RewriteRule 

指令之前可以有一个或多个RewriteCond指令。

条件之后的重写规则仅在当前URI与Pattern匹配并且满足此处的条件(TestString能够与CondPattern匹配)时才会起作用。

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

•RewriteRule反向引用,引用方法是:

$N 

(0<

=N<

=9)引用当前(带有若干RewriteRule指令的)RewriteCond中的与Pattern匹配的分组成分(圆括号!

)。

•RewriteCond反向引用,引用方法是:

%N 

(1<

=9)引用当前若干RewriteCond条件中最后符合的条件中的分组成分(圆括号!

•RewriteMap扩展,引用方法是:

${mapname:

key|default} 

细节请参见RewriteMap 

指令 

•服务器变量,引用方法是:

%{NAME_OF_VARIABLE} 

NAME_OF_VARIABLE可以是下表列出的字符串之一:

HTTP头连接与请求

HTTP_USER_AGENT

HTTP_REFERER

HTTP_COOKIE

HTTP_FORWARDED

HTTP_HOST

HTTP_PROXY_CONNECTION

HTTP_ACCEPT

REMOTE_ADDR

REMOTE_HOST

REMOTE_PORT

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

THE_REQUEST

REQUEST_URI

REQUEST_FILENAME

IS_SUBREQ

HTTPS

这些变量都对应于类似命名的HTTPMIME头、Apache服务器的C变量、Unix系统中的structtm字段,其中

的大多数在其他的手册或者CGI规范中都有说明。

其中为mod_rewrite所特有的变量如下:

IS_SUBREQ 

如果正在处理的请求是一个子请求,它将包含字符串"

true"

,否则就是"

false"

模块为了解析URI中的附

加文件,可能会产生子请求。

API_VERSION 

这是正在使用中的Apache模块API(服务器和模块之间内部接口)的版本,其定义位于include/ap_mmn.h中。

此模块API版本对应于正在使用的Apache的版本(比如在Apache1.3.14的发行版中这个值是

19990320:

10)。

通常,对它感兴趣的是模块的开发者。

THE_REQUEST 

这是由浏览器发送的完整的HTTP请求行(比如:

"

GET/index.htmlHTTP/1.1"

它不包含任何浏览

器发送的其它头信息。

REQUEST_URI 

这是在HTTP请求行中所请求的资源(比如上述例子中的"

/index.html"

REQUEST_FILENAME 

这是与请求相匹配的完整的本地文件系统的文件路径名。

HTTPS 

如果连接使用了SSL/TLS,它将包含字符串"

on"

off"

(无论mod_ssl 

是否已经加载,该变量都

可以安全的使用)。

其它注意事项:

1.SCRIPT_FILENAME和REQUEST_FILENAME包含的值是相同的——即Apache服务器内部的request_rec结 

构中的filename字段。

第一个就是大家都知道的CGI变量名,而第二个则是REQUEST_URI(request_rec

结构中的uri字段)的一个副本。

2.特殊形式:

%{ENV:

variable},其中的variable可以是任意环境变量。

它是通过查找Apache内部结构或者(如

果没找到的话)由Apache服务器进程通过getenv()得到的。

3.特殊形式:

%{SSL:

variable},其中的variable可以是一个SSL 

环境变量 

的名字,无论mod_ssl 

模块是否已

经加载都可以使用(未加载时为空字符串)。

比如:

SSL_CIPHER_USEKEYSIZE}将会被替换为128。

4.特殊形式:

%{HTTP:

header},其中的header可以是任意HTTPMIME头的名称。

它总是可以通过查找HTTP请求而得到。

Proxy-Connection}将被替换为Proxy-Connection:

HTTP头的值。

5.预设形式:

%{LA-U:

variable},variable的最终值在执行一个内部(基于URL的)子请求后确定。

当需要使用

一个目前未知但是会在之后的过程中设置的变量的时候,就可以使用这个方法。

例如,需要在服务器级配置(httpd.conf文件)中根据REMOTE_USER变量进行重写,就必须使用%{LA-

U:

REMOTE_USER}。

因为此变量是由URL重写(mod_rewrite)步骤之后的认证步骤设置的。

但是另一方面,因为

mod_rewrite是通过API修正步骤来实现目录级(.htaccess文件)配置的,而认证步骤先于API修正步骤,所以

可以用%{REMOTE_USER}。

6.预设形式:

%{LA-F:

variable},variable的最终值在执行一个内部(基于文件名的)子请求后确定。

大多数情

况下和上述的LA-U是相同的。

CondPattern是条件模式,即一个应用于当前TestString实例的正则表达式。

TestString将被首先计算,然后再与

CondPattern匹配。

CondPattern是一个perl兼容的正则表达式,但是还有若干增补:

1.可以在CondPattern串的开头使用'

!

'

(惊叹号)来指定不匹配。

2.CondPatterns有若干特殊的变种。

除了正则表达式的标准用法,还有下列用法:

•'

<

CondPattern'

(词典顺序的小于)

将CondPattern视为纯字符串,与TestString按词典顺序进行比较。

如果TestString小于CondPattern则为

真。

>

(词典顺序的大于)

如果TestString大于CondPattern则为

=CondPattern'

(词典顺序的等于)

如果TestString等于CondPattern(两个

字符串逐个字符地完全相等)则为真。

如果CondPattern是"

(两个双引号),则TestString将与空字符串

进行比较。

-d'

(目录)

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

-f'

(常规文件)

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

-s'

(非空的常规文件)

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

-l'

(符号连接)

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

-x'

(可执行)

将TestString视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。

该权限由操作系统检 

测。

-F'

(对子请求存在的文件)

检查TestString是否为一个有效的文件,而且可以在服务器当前的访问控制配置下被访问。

它使用一个内 

部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!

-U'

(对子请求存在的URL)

检查TestString是否为一个有效的URL,而且可以在服务器当前的访问控制配置下被访问。

它使用一个 

内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!

注意

所有这些测试都可以用惊叹号作前缀('

)以实现测试条件的反转。

3.还可以在CondPattern之后追加特殊的标记[flags]作为RewriteCond指令的第三个参数。

flags是一个以逗号

分隔的以下标记的列表:

nocase|NC'

(忽略大小写)

它使测试忽略大小写,扩展后的TestString和CondPattern中'

A-Z'

和'

a-z'

是没有区别的。

此标记仅用于

TestString和CondPattern的比较,而对文件系统和子请求的检查不起作用。

ornext|OR'

(或下一条件)

它以OR方式组合若干规则的条件,而不是隐含的AND。

典型的例子如下:

RewriteCond%{REMOTE_HOST} 

^host1.* 

[OR]

^host2.* 

[OR]RewriteCond%{REMOTE_HOST} 

^host3.*

RewriteRule...针对这3个主机的规则集...

如果不用这个标记,你就必须要书写三次条件/规则对。

举例

如果要按请求头中的"

User-Agent:

重写一个站点的主页,可以这样写:

RewriteCond 

%{HTTP_USER_AGENT} 

^Mozilla.*

^/$ 

/homepage.max.html 

[L]

^Lynx.*

/homepage.min.html 

/homepage.std.html 

解释:

如果你使用的浏览器识别标志是'

Mozilla'

,则你将得到内容最大化的主页(含有Frames等等)。

如果你使用的是(基于

终端的)Lynx,则你得到的是内容最小化的主页(不含table等等)。

如果上述条件都不满足(使用的是其他浏览器),则你得到

的是一个标准的主页。

RewriteEngine指令

说明打开或关闭运行时的重写引擎

语法RewriteEngineon|off

默认值RewriteEngineoff

RewriteEngine指令打开或关闭运行时的重写引擎。

如果设置为off,则此模块在运行时不执行任何重写操作,同时

也不更新SCRIPT_URx环境变量。

使用该指令可以使此模块无效,而无须注释所有的RewriteRule 

指令!

默认情况下,重写配置是不可继承的,也就是必须在每个需要使用重写引擎的虚拟主机中设置一个

RewriteEngineon指令。

RewriteLock指令

说明设置RewriteMap 

同步所使用的锁文件名

语法RewriteLockfile-path

作用域serverconfig

此指令设置mod_rewrite为了和RewriteMap 

程序通讯而使用的同步锁文件的名称。

在需要使用重写映射表程序

(rewritingmap-program)时,它必须是一个本地路径(而不能是一个NFS挂接设备)。

对其他类型的重写映射表(rewriting 

map),则无此要求。

RewriteLog指令

说明设置重写引擎日志的文件名

语法RewriteLogfile-path

作用域serverconfig,virtualhost

RewriteLog指令设置用于记录所有重写操作的日志文件的名称。

如果此文件名不以斜杠('

/'

)开头,则它是相对于Server 

Root的,此指令应该在每个服务器级别的配置中仅仅出现一次。

如果要关闭对重写操作的记录,不推荐将Filename设为/dev/null,因为,虽然重写引擎不能输出记录了,但仍会在内

部建立这个日志文件,这样会使服务器速度降低,而且对管理员毫无益处!

要关闭日志,可以删除或注解RewriteLog

指令,或者使用"

RewriteLogLevel0"

的设置

安全

参见安全方面的提示文档,其中讲述了为什么如果存放日志的目录对除了启动服务器以外的用户是可写的会带来安全隐患。

RewriteLog"

/usr/local/var/apache/logs/rewrite.log"

RewriteLogLevel指令

说明设置重写日志的详细程度

语法RewriteLogLevelLevel

默认值RewriteLogLevel0

RewriteLogLevel指令设置重写引擎日志的详细程度的级别。

0(默认级别)意味着不记录,而9或更大的值意味着记录

所有操作。

要关闭重写引擎日志,可以简单地将Level设为0,以关闭所有重写操作的记录。

较高的Level值会使Apache服务器速度急剧下降!

大于2的Level值只用于调试目的!

RewriteLogLevel3 

RewriteMap指令

说明定义用于关键词查找的映射函数

语法RewriteMapMapNameMapType:

MapSource

兼容性Apache2.0.41及以后的版本中可以使用不同的dbm类型

RewriteMap指令定义了一个映射表(RewritingMap),映射函数将使用该表来查找关键字然后插入/替换字段。

此查找操作

的源可以是多种类型。

MapName是映射表的名称,指定了一个映射函数,用于重写规则的字符串替换,它可以是下列形式之一:

${MapName:

LookupKey}

LookupKey|DefaultValue} 

如果使用了这样的形式,则会在MapName中查找关键词LookupKey。

如果找到了,则被替换成SubstValue;

如果没有找

到,则被替换成DefaultValue,如果没有指定DefaultValue,则被替换成空字符串。

例如,你可能定义这样一个RewriteMap:

RewriteMapexamplemaptxt:

/path/to/file/map.txt 

然后你就可以像下面这样在RewriteRule中使用该映射:

RewriteRule^/ex/(.*)${examplemap:

$1} 

可以使用下列MapType和MapSource的组合:

•标准纯文本

MapType:

txt,MapSource:

有效的Unix文件系统文件名这是重写映射表的标准形式。

MapSource是一个纯文本文件,包含空行、注释行(以字符'

#'

打头),以及每行一个

的替换对,如下所示:

MatchingKeySubstValue

例子

## 

map.txt--rewritingmap

Ralf.S.Engelschall 

rse 

#BastardOperatorFromHell

Mr.Joe.Average 

joe 

#Mr.Average

RewriteMapreal-to-usertxt:

•随机纯文本

rnd,MapSource:

有效的U

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2