免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4494 | 回复: 6
打印 上一主题 下一主题

[Web] 出了一个奇怪的问题,Apache rewrite参数有长度限制吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-23 02:42 |只看该作者 |倒序浏览
/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?

请高人解答!

论坛徽章:
4
技术图书徽章
日期:2013-09-23 10:22:37狮子座
日期:2013-10-15 23:31:54卯兔
日期:2013-11-11 17:33:15金牛座
日期:2013-11-15 17:25:28
2 [报告]
发表于 2007-07-23 08:33 |只看该作者
文档上的原话

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

论坛徽章:
0
3 [报告]
发表于 2007-07-23 13:54 |只看该作者
明白了,谢谢!

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
4 [报告]
发表于 2007-07-23 15:44 |只看该作者
原帖由 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和此程序之间的通讯。缺省时是没有同步操作的。

论坛徽章:
0
5 [报告]
发表于 2007-07-23 23:58 |只看该作者
HonestQiao这样做性能怎么样?

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
6 [报告]
发表于 2007-07-24 08:52 |只看该作者
原帖由 axpwx 于 2007-7-23 23:58 发表
HonestQiao这样做性能怎么样?


效果也是很好的:

此程序仅在Apache服务器启动时启动一次, 随后通过stdin和stdout文件句柄与重写引擎交互。

论坛徽章:
0
7 [报告]
发表于 2008-01-11 09:53 |只看该作者
这样就可以了,Apache官方文档上说的

  1. 说明:
  2. 为重写引擎设置一些特殊的选项

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

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

[ 本帖最后由 axpwx 于 2008-1-11 09:55 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP