Разрешать только URL-адреса, указанные в маршрутах, в Codeigniter

Если у меня есть контроллер под названием articles, у которого есть метод с именем view_articles, пользователь может ввести http://example.com/articles/view_articles/some-post и вернуть ему страницу.

Я указал маршрут на http://example.com/article/post-name . Как я могу сделать так, чтобы отображался только URL-адрес, указанный на маршруте? Есть ли способ для статей / view_articles / some-post показывать 404 вместо того, чтобы показывать ту же страницу, что и URL маршрута?

Я пытаюсь предотвратить дублирование для целей SEO.

Используйте $this->uri->segment(n) как часть класса URI внутри view_articles для перенаправления трафика на ваш маршрут, если URI содержит view_articles поскольку это второй сегмент.

Вы всегда можете выполнить маршрутизацию по умолчанию на страницу 404 путем правильного определения маршрутов в файле routes.php :

 $routes['article/(:any)'] = 'articles/view_articles/$1'; $routes['(:any)'] = 'main/e404'; 

Как указано в руководстве CodeIgniter:

Маршруты будут выполняться в том порядке, в котором они определены. Более высокие маршруты всегда будут иметь приоритет над более низкими.

Таким образом, вы можете в основном определить все, что хотите увидеть в начале файла, и заблокировать все остальное на последней строке.

Что касается вашего основного (может быть любого другого) контроллера 404 –

 function e404() { show_404(); } 

Я сделал это другим сложным способом, прежде всего, вы должны добавить код в функцию __construct в sys / core / Controller.php, вы можете проверить, является ли запрошенный URL-адрес маршрутами или нет этим кодом

 if(!isset($this->router->routes[uri_string()])){ show_404(); // Or whatever you want ... }