Если у меня есть контроллер под названием 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 ... }