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

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

5 голосов
/ 16 августа 2008

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

Ответы [ 4 ]

3 голосов
/ 16 августа 2008

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

1 голос
/ 18 сентября 2008

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

Но, чтобы ответить на ваш вопрос, вы описываете функцию WordPress "Pretty Permalinks", и вы можете узнать больше об этом в Wordpress codex . Более новые версии 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 голос
/ 16 августа 2008

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

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

1 голос
/ 16 августа 2008

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

...