正しいURLの書き方

奥村のホームページは次のどれでしょうか?

  1. http://oku.edu.mie-u.ac.jp/~okumura
  2. http://oku.edu.mie-u.ac.jp/~okumura/
  3. http://oku.edu.mie-u.ac.jp/~okumura/index.html

正しいのは 2(と,もしかしたら 3)です。

1 は明らかに間違いです。 このようなURLをブラウザがサーバに要求すると,サーバは次のような形式でエラーメッセージと正しいURL http://oku.edu.mie-u.ac.jp/~okumura/ をブラウザに返します。

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://oku.edu.mie-u.ac.jp/~okumura/">here</a>.</p>
</body></html>

ブラウザは,このエラーメッセージをそのまま表示するのではなく,こっそり再挑戦しますので,ユーザはこれでうまくいったように思ってしまうのです。 実際は無駄をしていることになります。

では 2 と 3 ではどちらがいいかですが,打ち込んでもらう時間を考えれば当然 2 の方を使うべきでしょう。

さらに,2 の方式なら,将来的に index.htmlindex.php(PHP)や index.cgi(CGI一般)や index.pl(Perl CGI)や index.asp(ASP) に変えたいときに,住所変更をしなくても対応できます。

なお,2 と 3 を混在させると,ブラウザは 2 と 3 が同じ文書だとわからないので,同じ文書を2回ダウンロードすることになり,無駄が生じます。 訪問済みリンクは色が変わるという仕組みもうまく働きません。

なお,2 の形式で統一した場合は,同じディレクトリの他のファイルから http://oku.edu.mie-u.ac.jp/~okumura/ にあたるファイルにリンクするには,

<a href="">戻る</a>

<a href="./">戻る</a>

のような記法が使えます。これを間違えて

<a href="index.html">戻る</a>

としてしまうと,2 と 3 の形式を混在させたことになり,ブラウザはすでにメモリに入っている http://oku.edu.mie-u.ac.jp/~okumura/ を再表示する代わりに,再度サーバに読みにいってしまいます。

RFC1808 ``Relative Uniform Resource Locators'' によれば "./""" と同義でベースURL自身を指すことになっています。

また,ディレクトリ階層を一つ上がったところのインデックスページに戻るには

<a href="../">戻る</a>

とします。

ちなみに,ブラウザの「戻る」ボタンは直前のページに戻るという意味です。 この意味の「戻る」リンクをJavaScriptで

<a href="JavaScript:history.back();">戻る</a>

のように作っている人もいます(ブラウザの「戻る」ボタンを知らない人への対策でしょうか)。 つまり,「戻る」リンクはいろいろな意味がありうるので,「何々のページに戻る」とか,あるいはさらに,パンくずリストで任意の階層のインデックスページに戻れるような工夫をするのがいいでしょう。

もう一つ問題ですが,次のものは正しいでしょうか。

  1. http://oku.edu.mie-u.ac.jp/~okumura/index.html/
  2. http://oku.edu.mie-u.ac.jp/~okumura/index.php/
  3. http://oku.edu.mie-u.ac.jp/~okumura/index.php/hoge/geho

1番目のものは,index.html/ というフォルダがない限り,エラーになります。

2番目のものは,エラーにならず,単に index.php(というPHPファイルを実行した内容)を表示します。

3番目のものも,エラーにならず,単に index.php(というPHPファイルを実行した内容)を表示します。

PHPやCGIなど,実行できるものについては,このような扱いになるのです。 このとき,余分に付けられた //hoge/geho といったものは,PATH_INFO という環境変数として index.php に渡されますので,処理に使うこともできますし,無視することもできます。


奥村晴彦

Last modified: 2006-05-06 13:22:19