SEO-дружественные URL в CodeIgniter без использования слагов? - PullRequest
4 голосов
/ 21 февраля 2011

Есть ли способ (через маршрутизацию) в CodeIgniter изменить:

example.com/category/4 на example.com/category/foo-bar

, где Foo Bar - это название категории 4 в базе данных?

Доступ с SEO-дружественного URL должен быть разрешен, но доступ через целое число должен вызывать ошибку 404.

Это также должно работать динамически, когда любое целое число автоматически преобразуется в URLверсия соответствующего имени категории.

Я видел несколько решений, использующих «слагов» ... есть ли достойная альтернатива?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 22 февраля 2011

Я работаю с CodeIgniter только в последние пару месяцев в свободное время, так что я все еще учусь, но я сделаю попытку (будьте осторожны):

В URL Helper есть функция url_title() (которую, конечно, нужно будет загрузить), которая изменит Foo Bar на foo-bar.

$name = 'Foo Bar';
$seo_name = url_title($name, TRUE);
// Produces: foo-bar

http://codeigniter.com/user_guide/helpers/url_helper.html

По умолчанию помощник URL удаляет недопустимые символы и добавляет дефисы (подчеркивание по параметру), а параметр TRUE будет все в нижнем регистре.

Чтобы решить вашу проблему, я полагаю, вы могли бы сделать оператор foreach в вашем файле rout.php или передать значение url_title() в URL, а не в идентификатор, и изменить свой код, чтобы он соответствовал url_title() значение с названием категории в БД.

0 голосов
/ 17 июня 2015

Есть ли способ (через маршрутизацию) в CodeIgniter изменить:

example.com / category / 4 на example.com/category/foo-bar

, где Foo Bar - этоимя категории 4 в базе данных?

Да.

Использование CI 3, http://www.codeigniter.com/user_guide/general/routing.html

Использовать обратные вызовы, PHP> = 5,3

$route['products/([a-zA-Z]+)/edit/(\d+)'] = function ($product_type, $id)

{

        return 'catalog/product_edit/' . strtolower($product_type) . '/' . $id;
};

Вы можете направить вызов функции для извлечения названия категории.

Надеюсь, я ответил на ваш вопрос и могу помочь большему количеству людей полюбить codeigniter, поскольку я считаю, что он быстрый и легкий.использование важно, чтобы сделать веб-приложение более безопасным, что, на мой взгляд, важно.

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

$route['(:any)/method/(:num)']  = 'Class/method';

или

$route['(:any)/method/(:num)']  = 'Class/method/$1';

$route['(:any)/gallery/(:num)']  = 'Class/gallery/$1';

base_url()/business-services/gallery/6 

base_url()/travel/gallery/12    

как изменить маршруты в codeigniter

Удачи:)

0 голосов
/ 22 февраля 2011

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

Я бы не рекомендовал выбрасывать 404. Использоватьвместо этого тег канонической ссылки, если вы беспокоитесь о индексации Google как http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html.

Но если вы действительно хотите, я думаю, вы можете написать функцию, которая вызывается во время ловушки pre_controller http://codeigniter.com/user_guide/general/hooks.html, который проверяет, содержит ли URL-адрес целое число во втором сегменте, а затем вызывает метод show_404 ().Возможно, лучшим решением при написании этой функции было бы перенаправление на SEO-дружественную версию.

0 голосов
/ 21 февраля 2011

Afaik ссылка между 4 и "foo-bar" должна храниться в БД, поэтому вам придется выполнить несколько запросов. Обычно это не делается через маршрутизацию в CI. Кроме того, маршрутизация просто указывает URL на контроллер и функцию и имеет мало общего с переписыванием URL.

Почему вы не хотите использовать слизней?

...