Catch-all Контроллер / Маршрут - PullRequest
       1

Catch-all Контроллер / Маршрут

7 голосов
/ 23 сентября 2011

Если я хочу перехватить каждый несуществующий URL-адрес, который был передан в мое веб-приложение, и предоставить им представление, не обслуживая 404, как мне это сделать?

По сути, мне нужно записывать статистику, основанную на этих попаданиях, но мне нужно делать это, обслуживая контент, а не ошибку 404.

Насколько я могу судить по application/config/routes.php, я мог бы использовать

$route['default_controller'] = 'catchall';

но мне это нужно для моего настоящего веб-приложения.

Я мог бы также использовать

$route['404_override'] = 'catchall';

но я не хочу бросать 404.

Я пытался использовать

$route['(:any)'] = '$1';

но мне нужно записать весь URL (например, любой длины сегментов), а не только первый сегмент.

Ответы [ 3 ]

6 голосов
/ 23 сентября 2011

Используйте $route['(:any)'] = 'catchall_controller'. Затем в вашем контроллере вы можете получить доступ к сегментам URI, используя $this->uri->segment(n).

1 голос
/ 23 сентября 2011

Вы пытались добавить несколько маршрутов перехвата всех маршрутов для различного количества сегментов?

$route['(:any)'] = '$1';
$route['(:any)/(:any)'] = '$1/$2';
$route['(:any)/(:any)/(:any)'] = '$1/$2/$3';

Полагаю, это сработает, но может быть более элегантный способ сделать это.

0 голосов
/ 23 сентября 2011

Я не знаю разницы между codeigniter и обычным PHP, но в обычном php вы можете отредактировать htaccess или любой другой, чтобы определить пользовательскую страницу 404.

На пользовательской странице 404 сделайте что-нибудькак эквивалент этого: $ required = $ _ SERVER ['REQUEST_URI'];

, чтобы получить запрошенный URL-адрес .... выполните вашу обработку ... и сделайте это, чтобы очистить 404:

заголовок («HTTP / 1.1 200 OK»);header («Статус: 200 OK»);

Затем включите ваш HTML или все, что вы хотите служить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...