显然,在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.
有没有人能够解决这个问题,任何替代解决方案或任何其他解决方案?
谢谢!
实际上,你不需要捕捉一切."?:"
为你不想重复使用的东西编写非捕获组(引入),这应该会给你一些喘息空间.相比:
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进行一些字符串处理.
一个,虽然相当愚蠢,但想法是分两步进行重写,即RewriteRule
第二条规则将第二条规则重写为某种中间格式.
一种解决方案可能是使用相同的正则表达式而不进行捕获,并将请求传递给index.php
然后使用index.php通过正斜杠分解请求URI,您可以使用数据进行处理.