mod_rewrite ограничение количества параметров/обратных ссылок

По-видимому, существует ограничение (9) на количество обратных ссылок, к которым вы можете получить доступ в htaccess RewriteRules.

Но у нас есть 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 рядом с ним.

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

Спасибо!


person adamJLev    schedule 03.04.2009    source источник


Ответы (3)


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

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-адреса в своем приложении.

person Tomalak    schedule 03.04.2009
comment
Ты мой сегодняшний герой - person Sergi Juanola; 15.11.2013

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

person andri    schedule 03.04.2009
comment
+1, потому что, хотя (как вы указываете) это глупая идея, на самом деле она действительна. - person UnkwnTech; 10.08.2010

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

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

person David Snabel-Caunt    schedule 03.04.2009