- 论坛徽章:
- 1
|
原帖由 nbrr 于 2007-7-23 08:33 发表 ![]()
文档上的原话
RewriteRule backreferences: These are backreferences of the form $N (0
哪有没有办法突破这个限制呢?
有,变通一下子,请看:
http://w.yi.org/ftp/FAPM/apache/Apache2/zh/mod/mod_rewrite.html
外部的重写程序
MapType: prg, MapSource: 有效的Unix文件系统文件名
这里的源是一个程序,而不是一个映射表文件。 程序的编制语言可以随意选择,但最终结果必须是可执行的 (即, 或者是目标代码,或者是首行为'#!/path/to/interpreter'的脚本).
此程序仅在Apache服务器启动时启动一次, 随后通过stdin和stdout文件句柄与重写引擎交互。 对每个映射函数的查找操作,它从stdin接收以回车结束的查找关键词, 然后把查找结果以回车结束反馈到stdout, 如果查找失败,则返回四个字符的``NULL'' (即, 对给定的关键词没有对应的值)。 此程序的最简单形式是一个1:1的映射(即,key == value),如:
#!/usr/bin/perl
$| = 1;
while (<STDIN>) {
# ...put here any transformations or lookups...
print $_;
}
但是必须注意:
``即使它看来简单而愚蠢,只要正确,就保持原样(Keep it simple, stupid)'' (KISS), 因为,在规则起作用时,此程序的崩溃会直接导致Apache服务器的崩溃。
避免犯一个常见的错误: 绝不要对stdout做缓冲I/O! 它会导致死循环! 所以上述例子中才会有``$|=1''...
使用RewriteLock指令定义一个加锁文件, 用于同步mod_rewrite和此程序之间的通讯。缺省时是没有同步操作的。 |
|