2009-04-03 2 views
5

Видимо есть ограничение (9), на сколько обратные_связи вы можете получить доступ в HTAccess RewriteRules ..mod_rewrite ряд ограничений параметров/обратные_связи

Но у нас есть RewriteRule, что требует более 9 параметров, что-то вроде это:

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 прямо рядом с ним.

Неужели кто-нибудь смог решить эту проблему, какие-либо альтернативные решения или что-то еще?

Спасибо!

ответ

17

Собственно, вам не нужно захватывать все. Напишите не захватывающие группы (введенные с "?:") за то, что вы не хотите повторно использовать, это должно дать вам некоторое передышку. Сравнить:

 
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

Ты мой сегодняшний герой – Korcholis

5

Одним из решений может быть использовать тот же регулярное выражение, без захватов, и передать запрос на index.php

Затем используйте index.php, чтобы взорвать URI запроса по прямой косой черты, и вы можете работать там с данные.

9

Один, хотя и довольно немой, идея состоит в том, чтобы сделать переписывание в два этапа, то есть цепочку двух RewriteRule с первым правилом, переписывающим его в некоторый промежуточный формат.

+1

+1, потому что хотя (как вы указываете) является «немой» идеей, она действительно является действительной. – UnkwnTech

Смежные вопросы