出了一个奇怪的问题,Apache rewrite参数有长度限制吗?

出了一个奇怪的问题,Apache rewrite参数有长度限制吗?

/index.php?$3=$5&$7=$9&$11=$13
规则后这样写就不可以,这样的时候,最后的$11和$13是无效的。

这样就可以 /index.php?$3=$5&$7=$9

$3,$5,$7,$9,$11,$13的规则都是一样的,就是一个url的几个参数。

难道rewrite的参数有限制,不能超过10?

请高人解答!
文档上的原话

RewriteRule backreferences: These are backreferences of the form $N (0 <= N <= 9), which provide access to the grouped parts (in parentheses) of the pattern, from the RewriteRule which is subject to the current set of RewriteCond conditions
明白了,谢谢!


QUOTE:
原帖由 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和此程序之间的通讯。缺省时是没有同步操作的。
HonestQiao这样做性能怎么样?


QUOTE:
原帖由 axpwx 于 2007-7-23 23:58 发表
HonestQiao这样做性能怎么样?

效果也是很好的:

此程序仅在Apache服务器启动时启动一次, 随后通过stdin和stdout文件句柄与重写引擎交互。
这样就可以了,Apache官方文档上说的

[Copy to clipboard] [ - ]
CODE:
说明:
为重写引擎设置一些特殊的选项

语法:
RewriteOptions Options
默认值: RewriteOptions MaxRedirects=10
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: FileInfo
状态: Extension
模块: mod_rewrite
兼容性: MaxRedirects在Apache 2.0.45以及更新的版本中有效

MaxRedirects=number
为了避免目录级RewriteRule的无休止的内部重定向, 在此类重定向和500内部服务器错误次数达到一个最大值的时候, mod_rewrite会停止对此请求的处理。 如果你确实需要对每个请求允许大于10次的内部重定向,可以增大这个值。