【階層】 絶対パスと相対パスについて詳しく解説

パスとは、ファイルからファイルまでの 『 道順情報 』だ。
例えば、『 A 』 と言うファイルから別のフォルダの 『 B 』と言うファイルまで行こうとすると、『 このフォルダを遡ってあのファイルに行き、さらに・・・ 』 などの 『 情報 』 が必要だ。

これがないと、リンクやファイルの場所情報がわからず、リンクを貼ったり、ファイルを読みこんだりができなくなる。

ところで、このパスの書き方にはパスには何種類かある。
よく使われているのは『 絶対パス 』『 相対パス 』 だ。



プログラムやコードの仕様や、ファイルの読み込み方やリンクの貼り方によっては、絶対パスでないといけなかったり、相対パスでないといけなかったり、URLでなければいけなかったりするので、違いがわかっていないと行き詰まってしまう可能性が高くなるので、できるだけ早いうちに、両者の違いについてキッチリおさえておく方が無難。

スポンサーリンク

絶対パスと相対パスの違い

絶対パス
/www/hogehoge.html
(URLが http://ooo.com/www/hogehoe.html の場合)


相対パス
www/hogehoge.html
(URLが http://ooo.com/www/hogehoe.html の場合)


この二つの違いは、『 www 』 の前の 『 / 』 だけだ。
でも、この 『 / 』 が大きな差を生む。

『 www 』 の前に 『 / 』 があると、どの階層からも必ず http://ooo.com/www/hogehoe.html が指定できる。

でも、『 www 』 の前に 『 / 』 がないと、階層が変わると読み込めなくなってしまう

例えば、相対パスで 『 www/hogehoge.html 』 を読み込む指定をしている場合、ルートフォルダの HTMLファイルから読み込む場合は、http://ooo.com/www/hogehoe.html が読み込まれるが、ルートフォルダにある 『 aaaフォルダ 』 の HTMLファイルから読み込む場合は http://ooo.com/aaa/www/hogehoe.html のファイルが読み込まれることになる。



これは、特に沢山の階層を持つ大型のサイトテンプレートファイルを読み込むようになると大切になってくる。

何故なら、階層が変わるのにテンプレートは1種類だからだ。
もちろん、各階層でそれぞれのテンプレートを用意するのもありかもしれないが、メンテナンスなどの手間を考えると、絶対パスかURLでの指定が無難だと思う。


【こんなはずでは】PHPやScriptを使ったテンプレートの注意点



ホームページへのパス

ホームページとは、ドメインそのもののページだ。
例えば、http://ooo.com/ の場合は、正確には http://ooo.com/index.html になる。

でも、普通は index.html や index.php や index.shtml などのインデックスファイルは表示されずドメインやフォルダのみのアドレスになる。
(もちろん、http://ooo.com/index.html でもいいしそれでもちゃんと表示される)

絶対パスと相対パスでは、ホームページ(ルートフォルダへのインデックスファイル)へのリンクの貼り方も異なるので注意が必要になる。


絶対パス(同じ階層からのパス)

パスが 『 スラッシュ 』/ だけになる。
一瞬見ると 「 大丈夫かな?(・_・;) 」と言う感じではあるが、実は大丈夫だったりする。

リンク
<a href="/">ホームページ</a>

SSI
<!--#include virtual="/"-->


相対パス(同じ階層からのパス)

インデックスファイルへのリンクになる。
個別ページのリンクからホームページに戻り、そこからブックマークしたりアドレスをコピーしてSNSなどにURLを貼り付けると、インデックスファイルがリンクされてしまうので要注意。
(実はうちのサイトは昔はこんな感じでサイト内のリンクを全部内部リンクにしてあったため、外部からのインデックスページへのリンクがこのようになってしまっているものがある)

リンク
<a href="index.html">ホームページ</a>

SSI
<!--#include file="index.html"-->


URL(同じ階層からのパス)

ただ単にURLでパスを指定しただけのもの。
特に可もなく不可もない。

ただし、サイトマップなどのリンクが大量にあるページは、リンク用URLの http://hogehoge.com の文字大量に必要になるため、絶対パスや相対パスのサイトマップよりも重いページになりやすい。

リンク
<a href="http://hogehoge.com/">ホームページ</a>

SSI
URLは指定できない


絶対パス(ルートフォルダにあるaaaフォルダからのパス)

ルートフォルダからのリンクと同じになる。

リンク
<a href="/">ホームページ</a>

SSI
<!--#include virtual="/"-->


相対パス(ルートフォルダにあるaaaフォルダからのパス)

../ または ./ を書くと、上の階層に上がる指定になる。
なので、上の階層に上がったところにあるインデックスファイルと言うことで、../index.html か、./index.html になる。

リンク
<a href="../index.html">ホームページ</a>

SSI
<!--#include file="../index.html"-->


URL(同じ階層からのパス)

ルートフォルダの時と変わらない。

リンク
<a href="http://hogehoge.com/">ホームページ</a>

SSI
URLは指定できない


絶対パスと相対パスの使い分け

絶対パスと相対パスは、場面によって使い分けると良い。
例えば、同じ階層にあるファイルの場合は、相対パスの方がコードやタグを書きやすくて良い。

その反面、絶対パスだとわざわざルートフォルダ直下からパスを書かないといけなくなるため、場合によっては長いパスになってしまう。


bbbフォルダからお互いのファイルへのリンクを貼る場合

【URLの場合】
<a href="http://ooo.com/aaa/bbb/111.htm">111</a>
<a href="http://ooo.com/aaa/bbb/222.htm">222</a>
<a href="http://ooo.com/aaa/bbb/333.htm">333</a>


【絶対パスの場合】
<a href="/aaa/bbb/111.htm">111</a>
<a href="/aaa/bbb/222.htm">222</a>
<a href="/aaa/bbb/333.htm">333</a>


【相対パスの場合】
<a href="111.htm">111</a>
<a href="222.htm">222</a>
<a href="333.htm">333</a>


でも、これが 『 テンプレート 』『 使い回しの多い部品 』 だったら、絶対パスかURLの方が良くなる。

先程も書いたが、相対パスだと階層が変わると指定するファイルが変わってしまうからだ。


URLと絶対パスの違い

URLと絶対パスは、どちらも階層が変わっても同じファイルが読み込まれると言う点では同じだ。

なので、サイト全部(どの階層からでも)同じ共用の部品を使う場合や、どの階層からでも同じページへリンクしたい場合などに向いている。

その反面、両者にも違いがある。
それ、別のドメインから読み込めるかどうかだ。

例えば、URLの場合は <a href="http://hohoho.info/">hohoho</a> と言う別サイトへリンクを張れるが、絶対パスの場合はそれができない。
あくまでも、同じドメインの中だけの指定になる。


【URLの場合】
<a href="http://hohoho.info/">hohoho</a>
→ hohohoと言うサイトへリンクを貼れる

【絶対リンク】
→ hohohoと言うサイトへはリンクを貼れない


また、URLの場合はコードやタグが長くなるので、自サイト内のファイルの指定であれば、絶対パスの方が無難だと思う。
(ファイル容量が少なくて済む)


URL
<a href="http://ooo.com/aaa/bbb/111.htm">111</a>
<a href="http://ooo.com/aaa/bbb/222.htm">222</a>
<a href="http://ooo.com/aaa/bbb/333.htm">333</a>

絶対パス
<a href="/aaa/bbb/111.htm">111</a>
<a href="/aaa/bbb/111.htm">222</a>
<a href="/aaa/bbb/111.htm">333</a>


上記のようなハイパーリンクの場合は、URLでも絶対パスでも両方OKだが、コードやプログラムなどによっては、絶対パスでしか指定できないものがあるので、どうしてもURLで指定しなければならない場合、別のコードやプログラムに変更する必要がある。


スポンサーリンク