⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1274.html

📁 著名的linux英雄站点的文档打包
💻 HTML
📖 第 1 页 / 共 5 页
字号:
标准纯文本<br>
MapType: txt, MapSource: 有效的Unix文件系统文件名<br>
这是重写映射表的标准形式,即, MapSource是一个纯文本文件,包含空行、注释行(以字符'#'打头), 以及每行一个的替换对,如下。<br>
<br>
MatchingKey SubstValue<br>
<br>
Example<br>
##<br>
## map.txt -- rewriting map<br>
##<br>
<br>
Ralf.S.Engelschall rse # Bastard Operator From Hell<br>
Mr.Joe.Average joe # Mr. Average<br>
<br>
RewriteMap real-to-user txt:/path/to/file/map.txt<br>
<br>
随机纯文本<br>
MapType: rnd, MapSource: 有效的Unix文件系统文件名<br>
这个与上述的标准纯文本很相似,但它有一个特殊的后处理特性: 查找完毕后,会解析其中包含的含义为``or''和``|''符号。 也就是说,会随机地选择其中之一作为实际的返回值。 虽然这看似毫无意义,但它的设计意图是, 在一个查找值是服务器名称的反向代理环境中,实现负载平衡。如:<br>
<br>
##<br>
## map.txt -- rewriting map<br>
##<br>
<br>
static www1|www2|www3|www4<br>
dynamic www5|www6<br>
<br>
RewriteMap servers rnd:/path/to/file/map.txt<br>
<br>
散列文件<br>
MapType: dbm[=type], MapSource: 有效的Unix文件系统文件名<br>
这里的源是一个二进制格式的DBM文件,包含了与纯文本相同的内容, 但是因为它有优化的特殊表现形式,使它的查找速度明显快得多。 此类型可以是sdbm, gdbm, ndbm或db,由compile-time settings所决定。如果省略type,则使用编译时选择的缺省设置。 你可以使用任何DBM工具或者下列Perl脚本来建立这个文件,但必须保证DBM的类型正确。 建立NDBM文件的例子:<br>
<br>
#!/path/to/bin/perl<br>
##<br>
## txt2dbm -- convert txt map to dbm format<br>
##<br>
<br>
use NDBM_File;<br>
use Fcntl;<br>
<br>
($txtmap, $dbmmap) = @ARGV;<br>
<br>
open(TXT, "&lt;$txtmap") or die "Couldn't open $txtmap!";<br>
tie (%DB, 'NDBM_File', $dbmmap,O_RDWR|O_TRUNC|O_CREAT, 0644)<br>
or die "Couldn't create $dbmmap!";<br>
<br>
while (&lt;TXT&gt;) {<br>
next if (/^s*#/ or /^s*$/);<br>
$DB{$1} = $2 if (/^s*(S+)s+(S+)/);<br>
}<br>
<br>
untie %DB;<br>
close(TXT);<br>
<br>
$ txt2dbm map.txt map.db<br>
<br>
内部函数<br>
MapType: int, MapSource: 内部的Apache函数<br>
这里的源是一个内部的Apache函数。 目前,还不能由你自己建立,只能使用下列已经存在的函数:<br>
<br>
toupper:<br>
转换查找关键词为大写.<br>
tolower:<br>
转换查找关键词为小写.<br>
escape:<br>
转换查找关键词中的特殊字符为十六进制编码.<br>
unescape:<br>
转换查找关键词中的十六进制编码为特殊字符.<br>
外部的重写程序<br>
MapType: prg, MapSource: 有效的Unix文件系统文件名<br>
这里的源是一个程序,而不是一个映射表文件。 程序的编制语言可以随意选择,但最终结果必须是可执行的 (即, 或者是目标代码,或者是首行为'#!/path/to/interpreter'的脚本).<br>
<br>
此程序仅在Apache服务器启动时启动一次, 随后通过stdin和stdout文件句柄与重写引擎交互。 对每个映射函数的查找操作,它从stdin接收以回车结束的查找关键词, 然后把查找结果以回车结束反馈到stdout, 如果查找失败,则返回四个字符的``NULL'' (即, 对给定的关键词没有对应的值)。 此程序的最简单形式是一个1:1的映射(即,key == value),如:<br>
<br>
#!/usr/bin/perl<br>
$| = 1;<br>
while (&lt;STDIN&gt;) {<br>
# ...put here any transformations or lookups...<br>
print $_;<br>
}<br>
<br>
但是必须注意:<br>
<br>
``即使它看来简单而愚蠢,只要正确,就保持原样(Keep it simple, stupid)'' (KISS), 因为,在规则起作用时,此程序的崩溃会直接导致Apache服务器的崩溃。<br>
避免犯一个常见的错误: 绝不要对stdout做缓冲I/O! 它会导致死循环! 所以上述例子中才会有``$|=1''...<br>
使用RewriteLock指令定义一个加锁文件, 用于同步mod_rewrite和此程序之间的通讯。缺省时是没有同步操作的。<br>
RewriteMap指令允许多次出现。 对每个映射函数都可以使用一个RewriteMap指令来定义其重写映射表。 虽然不能在目录的上下文中定义映射表, 但是,完全可以在其中使用映射表。<br>
<br>
注意<br>
对于纯文本和DBM格式的文件,已经查找过的关键词会被缓存在内核中, 直到映射表的mtime改变了或者服务器重启了。 这样,你可以把每个请求都会用到的映射函数放在规则中,这是没有问题的,因为外部查找只进行一次!<br>
<br>
RewriteOptions 指令<br>
<br>
RewriteOptions指令为当前服务器级和目录级的配置设置一些选项。 Option可以是下列值之一:<br>
<br>
inherit<br>
此值强制当前配置可以继承其父配置。 在虚拟主机级配置中,它意味着主服务器的映射表、条件和规则可以被继承。 在目录级配置中,它意味着其父目录的.htaccess中的条件和规则可以被继承。<br>
MaxRedirects=number<br>
为了避免目录级RewriteRule的无休止的内部重定向, 在此类重定向和500内部服务器错误次数达到一个最大值的时候, mod_rewrite会停止对此请求的处理。 如果你确实需要对每个请求允许大于10次的内部重定向,可以增大这个值。<br>
<br>
RewriteRule 指令<br>
<br>
RewriteRule指令是重写引擎的根本。此指令可以多次使用。 每个指令定义一个简单的重写规则。这些规则的定义顺序尤为重要, 因为,在运行时刻,规则是按这个顺序逐一生效的.<br>
<br>
Pattern是一个作用于当前URL的兼容perl的正则表达式. 这里的``当前''是指该规则生效时的URL的值。 它可能与被请求的URL不同,因为其他规则可能在此之前已经发生匹配并对它做了改动。<br>
<br>
正则表达式的一些用法:<br>
<br>
Text:<br>
. Any single character<br>
[chars] Character class: One of chars<br>
[^chars] Character class: None of chars<br>
text1|text2 Alternative: text1 or text2<br>
<br>
Quantifiers:<br>
? 0 or 1 of the preceding text<br>
* 0 or N of the preceding text (N &gt; 0)<br>
+ 1 or N of the preceding text (N &gt; 1)<br>
<br>
Grouping:<br>
(text) Grouping of text<br>
(either to set the borders of an alternative or<br>
for making backreferences where the Nth group can<br>
be used on the RHS of a RewriteRule with $N)<br>
<br>
Anchors:<br>
^ Start of line anchor<br>
$ End of line anchor<br>
<br>
Escaping:<br>
char escape that particular char<br>
(for instance to specify the chars ".[]()" etc.)<br>
<br>
更多有关正则表达式的资料请参见perl正则表达式手册页("perldoc perlre"). 如果你对正则表达式的更详细的资料及其变种(POSIX regex 等.)感兴趣, 请参见以下专著:<br>
<br>
Mastering Regular Expressions<br>
Jeffrey E.F. Friedl<br>
Nutshell Handbook Series<br>
O'Reilly & Associates, Inc. 1997<br>
ISBN 1-56592-257-3<br>
<br>
<br>
另外,在mod_rewrite中,还可以使用否字符('!')的pattern前缀,以实现pattern的反转。 比如:``如果当前URL不与pattern相匹配''. 它用于使用否pattern较容易描述的需要排除的某些情况,或者作为最后一条规则。<br>
<br>
注意<br>
使用否字符以反转pattern时,pattern中不能使用分组的通配成分。 由于pattern不匹配而使分组的内容是空的,所以它是不可能实现的。 因此,如果使用了否pattern,那么后继的字符串中就不能使用$N!<br>
重写规则中的Substitution是, 当原始URL与Pattern相匹配时,用以替代(或替换)的字符串。 除了纯文本,还可以使用<br>
<br>
$N 反向引用RewriteRule的pattern<br>
%N 反向引用最后匹配的RewriteCond pattern<br>
规则条件测试字符串中(%{VARNAME})的服务器变量<br>
映射函数调用(${mapname:key|default})<br>
反向引用的$N (N=0..9) 是指用Pattern所匹配的第N组的内容去替换URL。 服务器变量与RewriteCond指令的TestString相同。 映射函数由RewriteMap指令所决定,其说明也参见该指令。 这三种类型变量按上面列表中的顺序被扩展。<br>
<br>
如上所述,所有的重写规则都是(按配置文件中的定义顺序)作用于Substitution的。 URL被Substitution完全地替换,并继续处理直到所有规则处理完毕, 除非用L标记显式地终结 - 见下文。<br>
<br>
'-'是一个特殊的替换串,意思是不要替换! 似乎很愚蠢吧? 不, 它可以用于仅仅匹配某些URL而无须替换的情况下,即, 在发生替换前,允许以C (chain)标记连接的多个pattern同时起作用。<br>
<br>
还有,你甚至可以在替换字符串中新建包含请求串的URL。 在替换串中使用问号,以标明其后继的成分应该被重新注入到QUERY_STRING中。 要删除一个已有的请求串,可以用问号来终结替换字符串。<br>
<br>
注意<br>
一个特殊功能: 在用http://thishost[:thisport]作为替换字段的前缀时, mod_rewrite会把它自动剥离出去。 在配合生成主机名的映射函数使用的时候, 这个对隐含的外部重定向URL的精简化操作是有用的而且是重要的。 下面例子一节中的第一个例子有助于理解这点。<br>
谨记<br>
由于此功能的存在,以http://thishost为前缀的无条件外部重定向在你自己的服务器上是无效的。 要做这样一个自身的重定向,必须使用R标记 (见下文).<br>
此外,Substitution还可以追加特殊标记<br>
<br>
[flags]<br>
<br>
作为RewriteRule指令的第三个参数。 Flags是一个包含以逗号分隔的下列标记的列表:<br>
<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -