Коррекция адреса веб-страницы
Бывает, мы делаем ошибки при наборе адреса страницы. Классика жанра. Как результат, мы видим 404 страницу. Вчера я попробовал сделать обработчик таких ситуаций, который ищет похожий адрес и при обнаружении такого, переадресовывает на него.
На самом деле задача решается очень просто. Достаточно обратиться к расстоянию Левенштейна — понятию, обозначающему разницу двух строк в виде количества операций вставки, удаления и замены, необходимых для перевода одной строки в другую.
Если говорить о конкретных реализациях, то есть несколько готовых способов определения расстояния Левенштейна.
Существуют готовые функции levenshtein в PHP и PostgreSQL, у которых присутствует ограничение на длину сравниваемых строк в 255 символов. Для MySQL и Oracle я обнаружил только хранимые процедуры, которые рассчитывают данное расстояние.
Данную фичу я добавил на этом блоге. Для демонстрации ее работы возьмем адрес:
http://blog.salikhovilyas.ru/2009/06/07/did-you-know/
При вводе более-менее похожего адреса, система сразу перенапраляет на правильный:
http://blog.salikhovilyas.ru/2009/06/07/didyouknow/
Если адрес отличается достаточно сильно, то система выдает 404 страницу, а также предлагает наиболее похожие адреса:
http://blog.salikhovilyas.ru/2009/06/7/didknow/
Аналогичную логику я добавил в небольшую symfony based cms, которую мы используем в своих проектах.
Если говорить о популярных на данный момент CMS, аналогичный функционал я заметил только в umi.cms, в остальных системах ничего подобного я не нашел.


Я так понимаю, речь о смене шаблона задающего вид адреса страницы. Здесь же не идет речь о привязке к шаблону, производится поиск наиболее похожего адреса.