Как лучше всего нормализовать URL-адреса
-
21-09-2019 - |
Вопрос
Я создаю сайт, который позволяет пользователям добавлять ссылки по ключевому слову -> URL.Я хочу, чтобы несколько пользователей могли ссылаться на один и тот же URL-адрес (точно один и тот же экземпляр объекта).
Итак, если пользователь 1 вводит "http://www.facebook.com/index.php" и пользователь 2 вводит "http://facebook.com" и пользователь 3 типа в "www.facebook.com", как мне лучше всего "конвертировать" их в то, что они все разрешают:"http://www.facebook.com/"
Серверная часть написана на Python...
Как поисковая система отслеживает URL-адреса?Сохраняют ли они URL-адрес, а затем берут все, что он разрешает, или они выбрасывают URL-адреса, которые отличаются от того, что они разрешают, и просто заботятся о решенной версии?
Спасибо!!!
Решение
Итак, если пользователь 1 вводит "http://www.facebook.com/index.php" и пользователь 2 вводит "http://facebook.com" и пользователь 3 типа в "www.facebook.com", как мне лучше всего "конвертировать" их в то, что они все разрешают:"http://www.facebook.com/"
Вы можете разрешить пользователя 3, исправив недействительные URL-адреса. www.facebook.com
это не URL-адрес, но вы можете догадаться, что http://
должен идти на старт.Пустая часть пути аналогична /
путь, поэтому вы можете быть уверены, что ему тоже нужно идти до конца.Хороший парсер URL-адресов должен уметь это делать.
Вы можете разрешить пользователя 2, отправив запрос HTTP HEAD к URL-адресу.Если он возвращается с кодом состояния 301
, у вас есть постоянное перенаправление на реальный URL-адрес в Location
заголовок ответа.Facebook делает это, чтобы отправить facebook.com
трафик в www.facebook.com
, и это определенно то, что сайтам следует делать (хотя в реальном мире многие этого не делают).Вы можете разрешить рассмотреть возможность включения других кодов состояния перенаправления в 3xx
семья сделать то же самое;это не совсем правильно, но некоторые сайты используют 302
вместо 301
для перенаправления, потому что они немного толстые.
Если у вас есть время и сетевые ресурсы (плюс больше кода, чтобы предотвратить злоупотребление этой функцией с целью DoS-атак вы или другие), вы также можете рассмотреть возможность ПОЛУЧЕНИЯ целевой веб-страницы и ее анализа (при условии, что это не HTML).Если есть <link rel="canonical" href="..." />
элемент на странице, вы также должны считать этот URL-адрес правильным.(Посмотреть источник:Переполнение стека делает это.)
Однако, к сожалению, случай пользователя 1 не может быть решен.Facebook обслуживает страницу по адресу /
и страница на /index.php
, и хотя мы можем посмотреть на них и сказать, что они одинаковы, не существует технического метода, позволяющего описать эту взаимосвязь.В идеальном мире Facebook включал бы либо 301
перенаправить ответ или <link rel="canonical" />
сказать людям, что /
был URL-адрес правильного формата для доступа к определенному ресурсу, а не /index.php
(или наоборот).Но они этого не делают, и фактически большинство веб-сайтов, управляемых базами данных, тоже этого пока не делают.
Чтобы обойти эту проблему, некоторые поисковые системы(*) сравнивают контент в разных [под]доменах и, в ограниченной степени, также в разных путях на одном хосте и предполагают, что они одинаковы, если контент достаточно похож.Конечно, это большой объем работы, требует длительного хранения и обработки и, в конечном счете, не очень надежен.
Я бы не особо беспокоился об этом, кроме исправления URL-адресов, как в случае с пользователем 3.Судя по вашему описанию, не так уж важно, чтобы «одинаковые» страницы имели действительную идентичность, если только не существует конкретного варианта использования, о котором вы не упомянули.
(*:ну, в любом случае, Google;более традиционные традиционно этого не делали и с радостью предоставляли бы несколько ссылок на одну и ту же страницу, но я предполагаю, что другие крупные компании сейчас делают что-то подобное.)
Другие советы
Нет никакого способа узнать, кроме «волшебных» знаний о конкретном веб-сайте, что «/index.php» — это то же самое, что получение «/».
Итак, ваша задача, как говорится, невозможна.
я бы сохранил 3 ссылки как отдельные, так как никогда нельзя с уверенностью сказать, что они ведут на одну и ту же страницу.все зависит от того, как сервер (вне нашего контроля) разрешает URL-адрес.