1. Is this possible using routes?
Да.
2. If so could someone give me a bit of advice how to do it?
Конечно: $route['(:any)'] = "profile/u/$1";
Дополнительная информация: http://codeigniter.com/user_guide/general/routing.html
3. Also, if someone signs up a username that is the same as a controller name, what would happen then?
Вы не должны позволять пользователю регистрироваться с использованием такого имени пользователя.Facebook делает это!(www.facebook.com/groups/123457890 = "groups" нельзя использовать в качестве имени пользователя)
Во избежание перенаправления доступа к контроллеру в доступ к профилю, вы должны добавить конфигурацию маршрутизации *От 1020 * до к указанному выше, например:
$route['(admin|groups|signup)'] = "$1";
Здесь у нас есть регулярное выражение, простое для понимания.Вам просто нужно разделить имена контроллеров символом вертикальной черты.
Надеюсь, это поможет!