Permitir apenas URLs especificados em rotas para serem vistos no Codeigniter

Se eu tiver um controlador chamado artigos, que tem um método chamado view_articles, um usuário pode digitar http://example.com/articles/view_articles/some-post e mandar uma página.

Eu especifiquei uma rota para ser http://example.com/article/post-name . Como posso fazê-lo de modo que apenas o URL especificado na rota seja visível? Existe uma maneira de artigos / view_articles / some-post mostrar um 404 ao invés de mostrar a mesma página que o URL da rota?

Estou tentando evitar duplicações para fins de SEO.

Use $this->uri->segment(n) como parte da class URI dentro de view_articles para redirect o tráfego para sua rota se o URI contém view_articles como um segundo segmento.

Você sempre pode fazer o roteamento padrão para uma página 404 definindo corretamente rotas no seu arquivo routes.php :

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

Conforme indicado pelo guia do usuário CodeIgniter:

As rotas serão executadas na ordem em que são definidas. As rotas mais elevadas sempre prevalecerão sobre as mais baixas.

Então, basicamente, você pode definir tudo o que você quer ser visto no início do arquivo e bloquear tudo o resto na última linha.

Quanto ao seu principal método de 404 do controlador (pode ser qualquer outro)

 function e404() { show_404(); } 

Eu fiz isso de outra maneira complicada, antes de tudo, você deve adicionar algum código à function __construct em sys / core / Controller.php, você pode verificar se o URL solicitado está em rotas ou não por este código

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