Я вижу, вы понимаете, что пользователь может перешагнуть через все ваши другие действительные маршруты, создав соответствующее имя пользователя.
Вы можете попробовать перенаправить все запросы как имена пользователей, но предоставив триггер для других ваших контроллеров.(и другие действительные маршруты):
// Route everything to users profile
$route['(:any)'] = 'users/profile/$1';
// Route all requests after "my_trigger" as normal
$route['my_trigger/(:any)'] = '$1';
* Я не уверен, но вам может необходимо добавить еще /(:any)
смаршруты запуска.
Это будет означать, что my_trigger
должно быть недопустимым именем пользователя, но будет только недопустимым именем пользователя.
Идея состоит в том, что всем запросам, не относящимся к имени пользователя, должен предшествовать дополнительный «триггерный» сегмент, в противном случае он будет считаться именем пользователя.Таким образом, /blog
теперь должен быть доступен с помощью /trigger/blog
.
Вы можете, конечно, сделать то же самое с именем пользователя, но в итоге получить менее симпатичный URL-адрес, такой как /u/username
, или использовать запросстрока типа ?u=username
.
Другой вариант заключается в том, чтобы указать сегменты белого списка, которые должны вызывать контроллер как обычно, и занести их в черный список из доступных имен пользователей, одновременно направляя все другие запросы через контроллер пользователей.
В любом случае, если имя пользователя на самом деле не существует - вам нужно реагировать соответствующим образом, поэтому нет реальной необходимости в «динамических» маршрутах (т.е. создании маршрута для каждого пользователя).