1

ユーザーがキーワード->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を投げて、解決されたバージョンだけを気にしますか?

ありがとう!!!

4

3 に答える 3

3

したがって、ユーザー 1 が「http://www.facebook.com/index.php」にタイプし、ユーザー 2 が「http://facebook.com」にタイプし、ユーザー 3 が「www.facebook.com」にタイプする場合、どうすればよいですかこれらすべてが解決するものにそれらを「変換」するのが最善です: " http://www.facebook.com/ "

無効な URL を修正することで、ユーザー 3 を解決します。は URL ではありませんが、それが最初に表示されるはずだwww.facebook.comと推測できます。http://空のパスの部分はパスと同じな/ので、それも最後に行く必要があると確信できます。優れた URL パーサーは、このビットを実行できるはずです。

URL に対して HTTP HEAD 要求を行うことで、ユーザー 2 を解決できます。のステータス コードが返された場合は、応答ヘッダー301に実際の URL への永続的なリダイレクトがあります。LocationFacebook は にfacebook.comトラフィックを送信するためにこれを行います。これwww.facebook.comは間違いなく、サイトが行うべきことです (現実の世界では多くの場合そうではありませんが)。3xxファミリ内の他のリダイレクト ステータス コードに同じことを許可することを検討してください。これは実際には正しいことではありませんが、リダイレクトの302代わりに使用するサイトもあります。301

時間とネットワーク リソース (さらに、自分や他のユーザーによる DoS による機能の悪用を防ぐためのコード) がある場合は、ターゲット Web ページを取得して解析することも検討できます (それが HTML ではないことが判明した場合)。ページに要素がある場合は、<link rel="canonical" href="..." />その URL も適切なものとして扱う必要があります。(ソースを表示: スタック オーバーフローはこれを行います。)

しかし、残念ながら、ユーザー 1 のケースは解決できません。Facebook は のページ/と のページを提供/index.phpしています。それらを見て同じであると言うことができますが、その関係を説明する技術的な方法はありません。理想的な世界では、Facebook は、301リダイレクト レスポンスまたは特定のリソースにアクセスするための適切な形式の URL である(またはその逆)<link rel="canonical" />を人々に伝えるために、いずれかを含めます。しかし、そうではありません。実際、ほとんどのデータベース駆動型の Web サイトも、まだこれを行っていません。//index.php

これを回避するために、一部の検索エンジン (*) は、異なる [サブ] ドメインのコンテンツを比較し、限られた範囲で同じホスト上の異なるパスも比較し、コンテンツが十分に類似している場合はそれらが同じであると推測します。もちろん、これには多くの作業が必要であり、多くのストレージと処理が必要であり、最終的には信頼性が低くなります。

user 3 の場合のように URL を修正する以外は、あまり気にしません。あなたの説明から、あなたが言及していない特定のユースケースがない限り、「同じ」ページが実際のアイデンティティを共有する必要があることはそれほど重要ではないようです.

(*: とにかく、Google です。より伝統的なものは、伝統的に同じページへの複数のリンクを喜んで提供しませんでした。

于 2010-01-20T02:26:43.410 に答える
0

特定の Web サイトに関する「魔法の」知識以外に、「/index.php」が「/」をフェッチすることと同じであることを知る方法はありません。

したがって、述べたように、あなたの問題は不可能です。

于 2010-01-20T01:52:31.603 に答える
0

同じページに解決されることを確実に伝えることはできないため、3つのリンクを別々に保存します。それはすべて、サーバーが (私たちの制御外で) URL を解決する方法に依存します。

于 2010-01-20T01:53:47.843 に答える