PHP-маршрутизация с помощью Codeigniter (заголовки в URL-адресе для SEO)

У меня есть некоторые вопросы, касающиеся маршрутизации с помощью Codeigniter. Теперь я делаю следующее:

$route['articles/(:num)'] = 'articles/view/$1'; // $1 will contain an ID 

Это означает, что example.com/articles/123 отлично работает и загружает статью с идентификатором 123. Но я также хочу иметь возможность добавить заголовок статьи в URL (для SEO). Пример: example.com/articles/123/article-title

То, что я хочу, почти то же самое, что и Stack Overflow: stackoverflow.com/questions/123/the-title

Как я могу это сделать?

Мне также интересно, как работает Stack Overflow. Если я перейду к stackoverflow / questions / 111, заголовок будет автоматически добавлен в url. Это делается с помощью php redirect ()?

Я сделал что-то подобное в прошлом; Я не могу это узнать, но IIRC (это было несколько месяцев назад). Вы можете использовать маршрут, как и вы, а также добавить более конкретный, например

 $route['articles/(:num)/(:any)'] = 'articles/view/$1/$2'; $route['articles/(:num)'] = 'articles/view/$1'; 

Как вы можете видеть, обе карты относятся к одному и тому же методу, который является своего рода «перегруженным»; вы можете восполнить недостающий параметр, используя значение по умолчанию:

 function articles($id,$slug = FALSE) { } 

и просто игнорируйте второй параметр в поиске статьи.

Что касается добавления названия, вы можете:

  1. иметь поле «slug» в вашей базе данных, созданное при сохранении статьи. Вы можете использовать удобную url_title($title,'dash',TRUE) (в помощнике url), которая берет $title , использует dash как разделитель и делает ее строчной;
  2. используйте указанную выше функцию и преобразуйте заголовок статьи (после того как вы ее извлекли из базы данных) «на лету»; просто проверьте метод article (), если второй параметр не является ложным, и вы узнаете, нужно ли вам создавать пул или нет;

Что касается того, как показать слизню даже при использовании URL без нее, вы можете сделать, как вы догадались, перенаправление, но поскольку оба маршрута указывают на один и тот же метод, это ничего не изменит для вас.

О, э-э, будьте осторожны с циклами при вызове перенаправления, проверьте внимательно;)

Я предлагаю вам создать поле пули в вашей таблице и заполнить его URL-адресом, который вы хотите использовать как id. Позволь мне объяснить.

У вас есть эта таблица

 id title slug 

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

 id: 1 title: My first post slug: 1-my-first-post 

то вы можете использовать идентификатор объявления (в данном случае 1-мой-первый-пост) для страницы, вы можете назвать это:

 www.example.com/articles/1-my-first-post 

obviusly вам нужно справиться с этим в своем db slect

Как мы обсуждали в комментариях.

Вы можете создать маршрут несколько раз и с разными параметрами, например:

 $route['articles/(:num)/(:any)'] $route['articles/(:num)'] 

Я бы создал функцию с перенаправлением, добавив или не назвав ее.

Надеюсь, поможет.