Как перенаправить все вызовы URI на один контроллер, кроме некоторых статических? - PullRequest
1 голос
/ 14 мая 2010

Я использую codeigniter и хочу сделать свой портал более дружественным к SEO. У меня есть контроллер (статьи), который обрабатывает каждую статью на моем портале. URL выглядит так:

example.com/articles/category-sub-category/article-name

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

Я тоже хочу скрыть статьи, но если я скрываю это, каждый вызов поступает в контроллер статей, и это не то, что я хочу, потому что я хочу, чтобы мой URL выглядел так:

example.com/category-sub-category/article-name

Я пробовал это с правилами маршрутизации regexp в routs.php, но я не нашел способа сделать это правильно.

Ответы [ 4 ]

3 голосов
/ 17 мая 2010

Несколько дней назад я довольно подробно ответил на этот вопрос:

Как получить массив всех контроллеров в проекте Codeigniter?

3 голосов
/ 14 мая 2010

Используя функцию маршрутизации CI, вы должны установить маршрут для каждой категории, например, так ...

$route['category_one/:any'] = 'articles/category/category_one';
$route['category_two/:any'] = 'articles/category/category_two';
//.. and on and on until you've routed them all

В вашем контроллере Articles должен быть метод category, иначе вам также необходимо создать метод для каждой категории, который вышел бы из-под контроля.

По крайней мере, с CodeIgniter, вам лучше оставить часть articles в своем URL и сделать это так:

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

Вам все равно нужно создать метод category в вашем контроллере.

2 голосов
/ 15 мая 2010

ки! проблема решена!

Я нашел решение для моей проблемы на следующем сайте: http://bizwidgets.biz/web-design/codeigniter-routes-trick-removing-controller-names-from-the-uri-to-keep-urls-short/

$route['^(?!account|about|showcase|etc).*'] = "articles/read/$0";

Эта строка возвращает все неконтроллерные запросы моему контроллеру статей, поэтому у меня есть URL, которые я хотел бы получить:)

0 голосов
/ 14 мая 2010
RewriteCond %{REQUEST_URI} !^articles(?:/|$)
RewriteCond %{REQUEST_URI} !^static1(?:/|$)
RewriteCond %{REQUEST_URI} !^static2(?:/|$)
...
RewriteRule ^/(.*) /articles/$1 [QSA,NE]
...