2015-01-29 2 views
0

mywebsite.com/it/moto/ следует перенаправить на домашнюю страницу. Поэтому я написал это в routes.phpМаршрутизация не работает должным образом в CodeIgniter

$route['(\w{2})/(auto|moto)/(.*)'] = '$3'; 
$route['(\w{2})/(auto|moto)'] = $route['default_controller']; 

который работает довольно хорошо. Кроме того, mywebsite.com/it/moto/mercatino маршрутов до Mercatino контроллер, который является идеальным.

Нет, я хочу это mywebsite.com/it/moto/mercatino/componenti-veicolo/221/molle-originali-r6 на пути к этой функции внутри контроллера Mercatino

public function prodotto($category, $id, $title){ 

} 

, следовательно, я написал эту строку в routes.php

$route['(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto/$2/$3/$4"; 

Но я получаю сообщение об ошибке 404. Любая идея, как это исправить?

ответ

0

решаемые этот путь

$route['(.*)/(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto/$3/$4/$5"; //rule 1 
$route['(\w{2})/(auto|moto)/(.*)'] = '$3'; //rule 2 
$route['(\w{2})/(auto|moto)'] = $route['default_controller']; //rule 3 

Поставив mercatino правило перед всеми другими правилами и добавления (.*) раньше.

0
$route['(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto/$2/$3/$4"; 

Сколько каталогов находится в «mercatino/prodotto/$ 2/$ 3/$ 4»? По умолчанию codeigniter, я думаю, не входит в каталог больше уровня 2.

Что я имею в виду, когда codeigniter ищет файлы, предполагается, что внутри контроллера может быть только один каталог. Итак, если у вас есть controllers/d1/file.php, вы в порядке, но если у вас есть controllers/d1/d2/file.php, он не будет работать с поведением CI по умолчанию.

Для того, чтобы это работало, вам, вероятно, придется переопределить функцию Router class и fetch_directory или функцию _validate_request.

+0

Нет каталогов. Все «каталоги» после '/ prodotto /' передаются как параметры функции 'prodotto()', это то, что делает codeigniter. Так, например, если у вас есть url, например '/ dir1/dir2/dir3 /..../ dirn /' CI будет обращаться к классу 'Dir1', вызовите funcion' dir2' и передайте параметры '/ dir3/.../dirn/'к этой функции –

+0

ОК, я получил вашу мысль. Может быть, вы можете попробовать удалить '{1}'. Может быть, CI не поддерживает этот тип регулярного выражения в маршруте. Не уверен точно. –

+0

Я нашел решение. Посмотрите на мой ответ –

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