URL без идентификатора

Я часто вижу (переписанные) URL-адреса без идентификатора, как на некоторых установках WordPress. Как лучше всего этого добиться? Пример: site.com/product/some-product-name/ Может быть, сохранить массив имен и идентификаторов страниц в кеше, чтобы избежать запроса БД при каждом запросе страницы? Как избежать конфликтов и какие еще проблемы возникают при использовании URL-адресов без идентификаторов?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
2 325
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Что ж, это займет значительно больше времени, но все же достаточно быстро, чтобы это не волновало.

Robo Robok 25.11.2017 00:12
Ответ принят как подходящий

На самом деле использование идентификатора представляет собой ту же загадку - вы просто проверяете другое значение в своей базе данных. Часть вашего URL-адреса, указанная выше, «some-product-name» также является чем-то уникальным. Некоторые называют их слагами (Wordpress, также постоянные ссылки). Таким образом, вместо того, чтобы запрашивать в базе данных строку с определенным идентификатором, вы запрашиваете в базе данных строку с определенным слагом. Вам не нужно знать идентификатор, чтобы получить запись.

Wordpress имеет поле в таблице wp_posts для слага. Когда вы создаете сообщение, он создает слаг из заголовка сообщения (если это так, как вы его настроили), заменяя пробелы тире (или я думаю, вы можете установить его на подчеркивание). Также удаляются апострофы, запятые и т. д. Я считаю, что это также ограничивает общую длину пули.

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

Как вы можете знать или не знать, URL-адреса переписываются с помощью модуля Apache mod_rewrite. Как упоминалось здесь, Wordpress в фоновом режиме назначает слаг после очистки заголовка или имени сообщения.

Но, отвечая на ваш вопрос, вы описываете функцию Wordpress "Pretty Permalinks", и вы можете узнать о ней больше в Wordpress кодекс. Более новые версии Wordpress выполняют внутреннюю перезапись (без .htaccess editin, вместо этого wp_rewrite). Вот почему вы увидите один и тот же набор правил для любой структуры постоянных ссылок.

Хотя, если немного покопаться, можно найти старые правила перезаписи. Например:

RewriteRule ^([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$ /index.php?year=&monthnum=&day= [QSA,L]

Примет URL-адрес, например /2008/01/01/, и направит его на /index.php?year=2008&monthnum=01&day=01 (и загрузит категорию даты).

Но, как уже упоминалось, такая страница, как product-name, существует Только, потому что Wordpress уже обработал заголовок сообщения и сохранил его как поле в базе данных.

Другие вопросы по теме