Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top