2009-04-03 41 views
5

Rõ ràng có một giới hạn (9) trên bao nhiêu backreferences bạn có thể truy cập trong RewriteRules htaccess ..số mod_rewrite các thông số/backreferences giới hạn

Nhưng chúng tôi có một RewriteRule mà đòi hỏi nhiều hơn 9 thông số, một cái gì đó như này:

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] 

Vì vậy, điều xảy ra khi bạn cố gắng truy cập "$ 10", là nó sử dụng $ 1 và đặt 0 ngay bên cạnh.

Có ai có thể giải quyết vấn đề này, mọi giải pháp thay thế hay bất kỳ thứ gì không?

Cảm ơn!

Trả lời

17

Thực ra, bạn không cần chụp mọi thứ. Viết các nhóm không bắt (được giới thiệu với "?:") cho những thứ bạn không muốn sử dụng lại, điều này sẽ cung cấp cho bạn một số không gian thở một lần nữa. So sánh:

 
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 

Nhưng chỉ với mod_rewrite, bạn không thể vượt quá 9 tham chiếu ngược. Nếu bạn cần nhiều hơn, hãy sử dụng phương án thay thế - ví dụ chỉ ghi lại những phần quan trọng nhất trong việc viết lại và thực hiện một số xử lý chuỗi với phần còn lại của URL trong ứng dụng của bạn.

+1

Bạn là anh hùng ngày nay của tôi – Korcholis

5

Một giải pháp có thể được sử dụng regex cùng, mà không cần chụp, và vượt qua các yêu cầu đến index.php

Sau đó sử dụng index.php nổ Yêu cầu URI bởi các dấu gạch chéo và bạn có thể làm việc từ đó với dữ liệu.

9

Một, mặc dù khá ngu ngốc, ý tưởng sẽ là viết lại theo hai bước, nghĩa là, chuỗi hai RewriteRule s với quy tắc đầu tiên viết lại nó thành một số định dạng trung gian.

+1

+1, bởi vì mặc dù (như bạn chỉ ra) là một ý tưởng "ngớ ngẩn", nhưng thực tế là một ý tưởng hợp lệ. – UnkwnTech

Các vấn đề liên quan