Я делаю этот небольшой проект в Codeigniter, и мне нужно иметь один дополнительный сегмент перед контроллером.
URL Codeigniter по умолчанию:
base_url/controller/function/parameter1/../parametern
Что мне нужно:
base_url/something/controller/function/parameter1/../parametern
Где «что-то» - это имя, которое создает пользователь, поэтому я не могу создать подпапку в папке контроллеров, как предлагается в других темах, потому что она динамическая, и каждый пользователь выбирает то, что ему нравится.
По сути, мне нужно, чтобы он игнорировал этот сегмент (я бы перехватил этот сегмент в ловушке, расширил бы CI_controller или что-то в этом роде и проверил бы его), например, если я напишу base_url / stackoverflow-камни / дом / функция , base_url / asd-что угодно / дом / функция Codeigniter будет выглядеть так: base_url / home / function
У меня также естьПосмотрел Передача переменных перед сегментом URI контроллера в вопросе CodeIgniter , он почти такой же, как у меня, но предложенный ответ не сработал.
Я использовал $route['(:any)/(:any)'] = '$2';
, который работает, если URL-адрес base_url / что угодно/ home, но если URL-адрес base_url / любой другой / home / function или base_url / любой другой / home / function / param1 /../ paramn, то это не так, для обхода этого нужно написать:
$route['(:any)/(:any)'] = '$2';
$route['(:any)/(:any)/(:any)'] = '$2/$3';
...
$route['(:any)/../(:any)'] = '$2/../$n'
, что легко, но кажется немного неубедительным, и это будет работать, только если у меня есть от 2 до n сегментов в URL.Я также попытался смешать его с регулярными выражениями, такими как:
$route['(:any)/(.*)'] = '$2'
Но он работает так же, как и предыдущий, (. *) - это только один сегмент, но не весь URL-адрес ... Есть ли какой-то способпросто написать
$route['(:any)/rest of the url'] = 'rest of the url';
?
Я также пытался использовать .htaccess:
RewriteRule ([^/]*)/(.*) inedx.php?/$2
или
RewriteRule (.*)/(.*) index.php?/$2
Но это не сработало, потому что $ 2 ссылается наПервая часть, например, если я пишу:
base_url / one / two, он переписывает его в base_url / index.php? / one.Но если я использую:
RewriteRule (.*)/(.*) index.php?/$1/test/$2
, он ссылается как следует, например, base_url / one / two => base_url / index.php? / One / test / two, поэтому $ 1 = один и $ 2 = два, как и должно быть.
Довольно длинный вопрос, но я надеюсь, что кто-то может помочь, спасибо!