当前位置:  开发笔记 > 编程语言 > 正文

mod_rewrite参数数量/反向引用限制

如何解决《mod_rewrite参数数量/反向引用限制》经验,为你挑选了3个好方法。

显然,在htaccess RewriteRules中可以访问多少反向引用存在限制(9).

但是我们有一个需要9个以上参数的RewriteRule,如下所示:

RewriteRule ^([^/]+)/b([0-9]+)(/a([0-9]+))?(/v([0-9]+))?(,([0-9]+))?(/(ajax|share))?(,complete)?$ /index.php?control=sites&site=brands&control_file=version_select&name=$1&campaign_id=$2&answer=$4&page=$8&option=$10&video_id=$6&page_type=research [L]

那么当你尝试访问"$ 10"时会发生什么,它是使用$ 1并在它旁边放一个0.

有没有人能够解决这个问题,任何替代解决方案或任何其他解决方案?

谢谢!



1> Tomalak..:

实际上,你不需要捕捉一切."?:"为你不想重复使用的东西编写非捕获组(引入),这应该会给你一些喘息空间.相比:

Yours:                       Mine:
-------------------------    ---------------------------
^([^/]+)/b          $1       ^([^/]+)/b            $1
([0-9]+)            $2       ([0-9]+)              $2
(/a([0-9]+))?       $4       (?:/a([0-9]+))?       $3
(/v([0-9]+))?       $6       (?:/v([0-9]+))?       $4
(,([0-9]+))?        $8       (?:,([0-9]+))?        $5
(/(ajax|share))?    $10!     (?:/(ajax|share))?    $6
(,complete)?$       $11!     (,complete)?$         $7

但是仅使用mod_rewrite,就不能超过9个反向引用.如果您需要更多,请使用替代方法 - 例如,仅在重写中捕获最重要的部分,并使用应用程序中其余URL进行一些字符串处理.



2> andri..:

一个,虽然相当愚蠢,但想法是分两步进行重写,即RewriteRule第二条规则将第二条规则重写为某种中间格式.



3> David Snabel..:

一种解决方案可能是使用相同的正则表达式而不进行捕获,并将请求传递给index.php

然后使用index.php通过正斜杠分解请求URI,您可以使用数据进行处理.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有