Вопрос

Я создаю сайт, который позволяет пользователям добавлять ссылки по ключевому слову -> 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-адрес.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top