динамическое название для новостных статей - PullRequest
1 голос
/ 27 сентября 2010

У меня есть раздел новостей, где страницы разрешаются по URL-адресам, таким как

newsArticle.php? Id = 210

Что я хотел бы сделать, это использовать заголовок из базы данных для создания SEOдружественные названия, такие как

newsArticle / joe-go-to-town

Есть идеи, как мне этого добиться?

Спасибо,

R.

Ответы [ 2 ]

6 голосов
/ 27 сентября 2010

Я предлагаю вам на самом деле включить идентификатор в URL, перед частью заголовка, и игнорировать сам заголовок при маршрутизации.Таким образом, ваш URL может стать

/news/210/joe-goes-to-town

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

Очевидно, точные детали будут зависеть от того, какую платформу вы используете - вы не указали - но основные шаги будут:

  • При создании ссылки возьмите заголовок статьи и преобразуйте его во что-нибудь URL-дружественное;Вы, вероятно, хотите удалить все знаки препинания, и вам следует учитывать символы с акцентом и т. д. Помните, что заголовок не обязательно должен быть уникальным, поскольку у вас также есть идентификатор
  • При обработке запроса квсе, что начинается с / news, возьмите следующую часть пути, проанализируйте его как целое число и загрузите соответствующую статью.
0 голосов
/ 27 сентября 2010

Предполагая, что вы используете PHP и можете изменять свой исходный код (это совершенно необходимо для получения заголовка статьи), я бы сделал следующее:

Во-первых, вам понадобится функция (или, может быть, метод в объектно-ориентированной архитектуре) для генерации URL для вас в вашем коде.Вы предоставили бы функции объект article или идентификатор статьи, и она возвращает дружественный URL с идентификатором и понятным заголовком.
В основном function url(Article $article) => URL.

Вам также понадобятсяПравила перезаписи URL для удаления скрипта PHP из URL.Для Apache обратитесь к документации mod_rewrite для деталей (RewriteEngine, RewriteRule, RewriteCond).

...