Как правило есть соответствие один-к-одному между строкой URL и соответствующим контроллером/методом. Сегменты URL обычно формируются по этому шаблону:
Однако, в некоторых случаях, вы можете перенаправить адрес так, чтобы строка вида контроллер/метод указывала на совершенно другие места в приложении.
Например, вы хотите чтобы ваши адреса соответствовали этому шаблону:
www.your-site.com/product/1/
www.your-site.com/product/2/
www.your-site.com/product/3/
www.your-site.com/product/4/
Как правило второй сегмент адресной строки резервируется для имени функции, но в примере выше мы хотим использовать вместо него ID.
Чтобы сделать это, необходимо перенаправить адрес на обработчик URL CodeIgniter.
# Установка правил собственной маршрутизации
Правила маршрутизации объявляются в вашем файле <var>application/config/routes.php</var>. В нем вы увидите массив с названием <dfn>$route</dfn>, при помощи которого вы сможете переопределить адреса. Роуты могут быть определены двумя способами: <dfn>маской</dfn> или <dfn>Регулярными Выражениями</dfn>.
# Маски
Обычная маска маршрута может выглядеть примерно так:
В роуте ключ массива содержит URI в котором будет искаться соответствие, а в значении содержится путь, куда необходимо переадресовать обработчик. Если в приведенном выше примере слово «product» находится в первом сегменте, а номер во втором сегменте, то вместо этого адреса будет произведено обращение к классу «catalog» и методу «product_lookup».
Вы можете использовать буквы или два типа заполнителя:
:num
:any
__:num__ будет соответствовать сегмент, содержащий только цифры.
__:any__ будет соответствовать сегмент с любыми символами.
[important]__Замечание:__ Роуты будут работать в том порядке, в котором они определены. Ранее определенные всегда будут преобладать над определенными позже.
# Примеры
Вот несколько примеров маршрутизации:
`$route['journals'] = "blogs";`
URL содержащий слово «journals» в первом сегменте будет переадресован к классу «blogs».
`$route['blog/joe'] = "blogs/users/34";`
URL содержащий сегменты «blog/joe» будет переадресован к классу «blogs» и методу «users». ID будет установлен в значение «34».
URL со словом «product» в первом сегменте, и любым другим во втором будет перенаправлен к классу «catalog», методу «product_lookup».
[important]__Важно:__ Не используйте начинающих/конечных слешей.
# Регулярные Выражения
При желании вы можете использовать Регулярные Выражения для определения правил роутинга. Допускается любое правильное регулярное выражение, как и обратные ссылки.
[important]__Замечание:__ Если вы используете обратные ссылки, то должны пользоваться синтаксисом доллара и затем двойной бэкслеш.
Типичный RegEx роут должен выглядеть так:
`$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";`
Например, при запросе адреса <dfn>products/shirts/123</dfn> будет вызван контроллер <dfn>shirts</dfn> и метод <dfn>id_123</dfn> в нем.
Вы, также, можете одновременно использовать Маски и Регулярные Выражения.
# Зарезервированные роуты
Есть два зарезервированных роута:
`$route['default_controller'] = 'welcome';`
Этот роут показывает что необходимо загружать, когда пользователь ввел корневой адрес, т.е. прямо не показал к какому контроллеру обращаться. В этом примере будет загружен класс «welcome». Вам рекомендуется всегда указывать этот роут, т.к. страницы 404 будут, по умолчанию, ссылаться на него.
`$route['scaffolding_trigger'] = 'scaffolding';`
Здесь вам предлагается установить секретное слово, при наличии которого в URL будет активироваться возможность скаффолдинга. Пожалуйста прочтите главу [Скаффолдинг](scaffolding.html) для выяснения подробностей.
[important]__Важно:__ Зарезервированные роуты должны быть объявлены раньше роутов с Масками или Регулярными Выражениями.