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

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

16.08.2008 16:24:58
4 ОТВЕТА
РЕШЕНИЕ

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

3
16.08.2008 16:32:16

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

1
16.08.2008 16:30:10
Ну, это займет значительно больше времени, но все равно достаточно быстро, чтобы не волноваться.
Robo Robok 24.11.2017 21:12:40

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

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

1
16.08.2008 16:50:44

Как вы можете знать или не знать, 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=$1&monthnum=$2&day=$3 [QSA,L]

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

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

1
18.09.2008 04:02:36