07
11/2009

Коррекция адреса веб-страницы

The English version of this post

Бывает, мы делаем ошибки при наборе адреса страницы. Классика жанра. Как результат, мы видим 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, в остальных системах ничего подобного я не нашел.

7 Comments_5

Интересно.. это на уровне своего роутинг-класса сделано?
Нет, я просто доработал экшн, заданный в settings.yml для 404 страницы
вордпресс частично так может, при смене, в настройках блога, пермалинков он автоматом пересылает на новые... да и наверняка есть более продвинутые плагины...
2Alex

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

Именно так, но также очень легко можно расширить функционал с помощью плагинов, таких как, например permalink-finder, Smart 404 или 404 SEO Plugin... плохо конечно, что до версии 2.5 вордпресс ломали в легкую, да и прожорлив он....
Шикарно! Есть ли варианты подобное реализовать на WP при условии отсутствия углубленных знаний? Думаю таки манипуляция с адресом на самом деле очень полезны.
Было бы очень полезно обзавестись подобной штукой
Оставить comment
Показать другие цифры

В тексте комментария можно использовать теги <b><i><u><s><sup><code><pre>.
Адреса сайтов автоматически становятся ссылками.

_