Всем здравствуйте!
Сразу хочу сказать что ЧПУ вида site.tld/Ололо и site.tld/Атата я делать умею и про вот это:
code-igniter.ru/forum/post18174.html (не сочтите за рекламу ресурса, я к нему не имею никакого отношения) тоже в курсе. У меня более сложный случай.
Мне нужны ЧПУ вида site.tld/сказки/сказка-про-белого-бычка site.tld/повести/повесть-временных-лет site.tld/романы/поднятая-целина (само собой все это было взято от балды для примера чтобы показать закономерность).
Если я в роутах вписываю что-то вроде:
$route['сказки'] = «skazki»;
в skazki.php корректно работает только index. Я пытаюсь с помощью $this->uri->segment(n) вытащить «сказка-про-белого-бычка», не работает. Пробовал так:
$route['сказки'] = «skazki/show»;
и так
$route['сказки:/any'] = «skazki»;
в любом случае выбрасывает на 404 страницу.
В принципе этого достаточно если урлы формировать так:
вида site.tld/сказки/?q=сказка-про-белого-бычка и в контроллере внутри index`а ловить через $_GET['q'].
Можно пойти по этому пути глубже и включить $config['enable_query_strings'] и как пишет документация index.php?c=controller&m=method а дальше нагло и цинично с помощью mod_rewrite.
1) Может быть в роутах нужно какую-то правильную регулярку чтобы работало как задумано или я что-то недопонимаю с настройкой роутов в CI?
2) Если всетаки лучше ловить через ?q=… помогите с апачевским правилом реврайта) Честно — мод_реврайт это «боль моя дырка задница» (с) Борат
3) Если не 1 и не 2 — чем плохим грозит мне использование 3-го пункта? В принципе под него и реврайт правило я представляю какое будет, но не представляю архитектурно каких органичений ждать от этого решения. И может быть это даже лучше чем костыль, о котором спрашиваю в вопросе 2?
Заранее благодарю)
Добавлено на следующий день:
рейтинг -5, кто-то минусанул в карму, ИЧСХ ни одного вообще никакого ответа. Обидно даже…
Добавлено спустя еще день:
Всем спасибо кто отвечал, минусовал, плюсовал, в итоге я разобрался!
Меня сгубила невдумчивость в процессе чтения мануалов.
Ларчик открывался проще чем я думал:
В роуты:
$route['сказки/(:any)'] = "skazki/show/$1";<br/>
В контроллер:
$need = $this->uri->segment(2, 0);<br/>
прекрасно вытаскивает то, что было нужно, т.е. в данном примере в $need будет 'сказка-про-белого-бычка' в закодированном виде. Что с ней делать это уже другая история.
Вобщем вопрос считаю закрытым. Надеюсь это поможет всем кто с ним столкнулся. Третьим комментарием кстати приведен вполне работоспособный код.