1

PHPと正規表現を使用して小さなスクリプトをプログラミングしています

このスクリプトの目的は、ページ内のすべてのリンクを抽出し、これらのリンクを絶対リンクに変換することです.

このページに次のリンクがある場合、このページhttp://www.example.com/xxx1/xxx2/xxx3.htmlがあるとしましょう

index.html --- 絶対リンクはhttp://www.example.com/xxx1/xxx2/index.htmlになります

./index.html --- 絶対リンクはhttp://www.example.com/xxx1/xxx2/index.htmlになります

../index.html --- 絶対リンクはhttp://www.example.com/xxx1/index.htmlになります

/index.html --- 絶対リンクはhttp://www.example.com/index.htmlになります

それで

index.html = 現在のディレクトリで開きます

./index.html = 現在のディレクトリでも開きます

../index.html = 親ディレクトリで開きます

/index.html = ルート ディレクトリで開きます

問題は、URL が検索エンジンに適したものである場合はどうなるかということです。

この URL があるとします。

((ケース1)): http://www.example.com/xxx1/xxx2/xxx3/index/

また

((case2)): http://www.example.com/xxx1/xxx2/xxx3/index

case1 の "index" はディレクトリですか、それともページですか? case2 の場合はディレクトリですか、それともページですか? そして、次のリンクがケース 1 と 2 の両方で絶対リンクとしてどのように見えるか

index.html --- ?

./index.html --- ?

../index.html --- ?

/index.html --- ?

一部の人にとっては簡単な質問かどうかはわかりませんが、私にとっては混乱しますか?

ありがとう :)

4

1 に答える 1

3

あなたの例に対する直接の答え

ケース 1indexURL の「ディレクトリ コンポーネント」であり、ケース2 indexは URL の「ファイル コンポーネント」です。これは、実際に Web サーバー上の通常のファイルまたはディレクトリであるかどうかとは無関係です。以下の説明を参照してください。これらの URL でサーバーによって HTML ページが提供される場合、私は両方を「ページ」と呼びます。

ケース 1: (からのリンクhttp://www.example.com/xxx1/xxx2/xxx3/index/)

  1. index.html->http://www.example.com/xxx1/xxx2/xxx3/index/index.html
  2. ./index.html->http://www.example.com/xxx1/xxx2/xxx3/index/index.html
  3. ../index.html->http://www.example.com/xxx1/xxx2/xxx3/index.html
  4. /index.html->http://www.example.com/index.html

ケース 2: (からのリンクhttp://www.example.com/xxx1/xxx2/xxx3/index)

  1. index.html->http://www.example.com/xxx1/xxx2/xxx3/index.html
  2. ./index.html->http://www.example.com/xxx1/xxx2/xxx3/index.html
  3. ../index.html->http://www.example.com/xxx1/xxx2/index.html
  4. /index.html->http://www.example.com/index.html

したがって、変わらないのは絶対リンクだけです - 4.

説明

リンクはブラウザの URL に対して相対的であり、最初に入力した URL とは異なる場合があります (HTTP リダイレクトなど)。ほとんどの Web ブラウザーは、リンクをたどるかリダイレクトされると、URL バーを現在のアドレスで更新します。そのため、編集したばかりでない限り、そこに表示されるアドレスが重要です。

スラッシュで終わる URL は、ディレクトリを参照すると見なされます (URI 構文についてはRFC2396で暗示されていますが、実際にはそのようには呼び出されません)。それ以外の場合は、ディレクトリ内のファイルを参照すると見なされます。

-- 補足: これは、Web サーバーがファイルを提供するために使用するファイルシステム パス (存在する場合) のタイプに必ずしも対応するとは限りません。 ほとんどの Web サーバーは、ファイル システム上のディレクトリへの URL マッピングを要求された場合、ディレクトリ内のファイルを何らかのセット名 (多くの場合 index.html ですが、通常は構成可能) で提供するか、HTML ディレクトリ リストを生成します。サーバーによって (またはそれが無効になっている場合はアクセス エラー)。末尾のスラッシュのない同様のパスの「ファイル URL」が要求された場合、通常は同じものが提供されます。この場合、「ファイル URL」は実際にはディレクトリ ファイルシステム パスにマップされます。--

これにより、上記の例のように矛盾が生じる可能性があります。「ファイル URL」http://www.example.com/xxx1/xxx2/xxx3/indexはおそらく「ディレクトリ URL」と同等ですhttp://www.example.com/xxx1/xxx2/xxx3/index/が、相対リンクはこれら 2 つの URL とは異なるパスを参照する可能性があり、一方が機能し、他方が壊れている可能性があります。 .

そのため、ディレクトリにリンクする場合は、同等の「ファイル URL」ではなく、常に「ディレクトリ URL」(末尾のスラッシュを含む) を使用することをお勧めしhttp://www.ietf.org/meetings/ますhttp://www.ietf.org/meetings。 . 実際、多くの Web サーバーは、HTTP 301 リダイレクト応答を使用して、後者を要求するクライアントを前者にリダイレクトするように構成されています。ブラウザの URL バーに後者を入力すると、これを確認できます。URL バーは、その応答を取得すると、前者に変わります。

于 2009-02-13T08:57:13.233 に答える