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





Пока названия продуктов уникальны, это не должно быть проблемой. Поиск продукта по уникальному имени, а не по числовому идентификатору, не займет больше времени (по крайней мере, незначительно), если столбец проиндексирован.
На самом деле использование идентификатора представляет собой ту же загадку - вы просто проверяете другое значение в своей базе данных. Часть вашего 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 уже обработал заголовок сообщения и сохранил его как поле в базе данных.
Что ж, это займет значительно больше времени, но все же достаточно быстро, чтобы это не волновало.