質問: 絶対パスとフルパスの違いがイマイチわかりません。 絶対パスというのはいわゆるURLのことで、URLというのはフルパスの省略されたもの、ということでいいのでしょうか。 普通にパソコンのブラウザからフルパスを使ってアクセスすると、サーバーにある関係ない情報まで見ることが出来てしまうので、指定した目的以外のフォルダをApachにより省略していわゆる普通のURLにするということですか? また、指定したフォルダを省略するためのApachとはどのようなものでしょうか。
回答: その説明、誤解を産むといいますか、一般の意味を拡張しているといいますか、あまり正確ではありません。 パスというのは、AからBまでの道順でのことです。 コンピュータでは、単にパスと言った場合、あるファイル/ディレクトリから、他のファイル/ディレクトリまでの道順(ディレクトリの移動順)を示した「ファイルパス」「ディレクトリパス」のことを指すことが多いです。 ファイル/ディレクトリは、それ以上戻れない「一番上」が唯一存在して、そこから枝分かれして階層状になっています。このような構造を「木」といって、その「唯一の一番上」をルート(根)といいます。 (厳密な木/根の定義は省略します。 さらに厳密に言えば、ディレクトリ構成は木ではありませんが、木として続けます) Windowsで言えば、マイコンピュータという根があり、そこから C:\,D:\..と枝分れして、C:\は更にProgram Files, Windowsと枝分かれ....となっています。 このファイルパスの表現として、 現在位置を基点にした「相対パス」 ルートを基点とした「絶対パス」、あるいは(省略しているように見える相対パスに対して全部書いているように見えるので)「フルパス」 があります。 その文章のややこしいところは、ルートの異なる2つの木を、あたかも一つの木のように説明しようとしていることです。 その文章で「絶対パス」として紹介しているのは、「Windowsのファイルシステムの木」での「絶対パス」のことです。 その文章で「フルパス」として紹介しているのは、「httpサーバー上でのURLの木」での「絶対パス」のことです。 httpサーバーというのは、httpリクエストに応じてデータを返すプログラムです。 ブラウザが、http:~でデータをやりとりする相手はhttpサーバーであって、直接ファイルにアクセスするわけではありません。 一般的なhttpサーバーでは、標準の動作として、コンピュータの適当なディレクトリをhttpサーバーにとってのルートとして、その下にファイル構成をそのままURLの構成にしています。 ちょうど、ファイルシステムの木にhttpサーバーのヤドリギがあるようなものです。 そのURLを使ったリクエストがあったら、対応するファイルの内容をそのまま返信します。 (「省略して云々」というのは初心者向けの説明(のつもり)なのでしょうが、正確ではありません。そのために混乱が生じているのでしょう) このとき、URLの相対パスは、ファイルのそれと一致します。 URLの絶対パスは、「ヤドリギの根」からのパスになります。ファイルシステムの根からではありません。よって、ファイルシステムの絶対パスとは違うものになります。 htmlでのhref=~や、ブラウザ等でURLを指定する場合、httpサーバーが管理するのはhttpの木なので、ファイルシステム用の絶対パスではなく、URL用の絶対パス(ヤドリギでのパス)で書く必要があります。 ... ということなのです。 ちなみに、まともなhttpサーバーだったら、例にあるような「ファイルシステムの絶対パス」を書いたところで、「そのURLを見たら『サーバーのファイルシステム上に、そのパスのファイル/ディレクトリが存在する(可能性がある)』という情報が漏れる」以外の被害はまずありません。 これでファイルシステムにアクセスできるようなサーバーなら「重大な脆弱性あり」として公表されていることでしょう。 「Apache」は httpサーバーの一種で、大きなシェアを占めています。