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