- 締切済み
相対リンク?
(1)ファイル名を指定するとき common.css ./common.css どれでも同じですか? (2)ディレクトリを指定するとき bbs ./bbs ./bbs/ どれでも同じですか? (3) /common.css ./common.css や /bbs ./bbs は同じ意味ですか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
>(2) ./bbs ./bbs/ この違いですが、bbsがディレクトリの場合は後者の方が良いです。 まず1点。 ./bbs でディレクトリにアクセスした場合、一般的には、./bbs/にリダイレクトされます。 「リダイレクト処理」が入る分だけサーバーやネットワークに付加が掛かることになります。 (といっても1~2パケットですので、個人レベルで気にするようなことではありませんが、プロなら気にすべきというレベルです。) 2点目。 ./bbs/でも./bbsでも、リダイレクトせずに ./bbs/index.html が表示されることがあります(サーバーの設定による)。 ですが、 ./bbs/index.htmlの中で<img src="image.jpg">と書かれていた場合、 ./bbs/ でアクセスした場合の./bbs/index.htmlに置けるimage.jpgは ./bbs/image.jpgを参照する この場合の基準パスは ./bbs/index.html と同じです。 ./bbs でアクセスした場合の./bbs/index.htmlに置けるimage.jpgは ./image.jpgを参照する(./bbs/の1つ上のディレクトリが基準) この場合の基準パスは ./index.html と同じです。 という違いが発生します。 サーバーの処理だけでなく、クライアントの処理も変わりますのでディレクトリには最後にスラッシュを付けた方が良いです。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
HTMLのカテゴリーに質問されていることと内容から、HTTPサーバーとブラウザの問題です。 そのページ(http://hoge.com/abc/efg.html)に<a href="./bbs/">と書かれていたら、ブラウザは、それを解釈して、 GET: /abc/bbs と要求をします。 bbs ./bbs はすべて同じ扱いになります。./bbs/ は少し違う ここからは、サーバーの設定によります。 HTTPサーバーの基本は、受け取ったpath( /abc/hij/bbs とします。)で 1) /abc/hij/bbs がファイルでしたらそれを送信します。 ※それが実行プログラムの場合は処理プログラムに渡します。 2) ファイルでなくディレクトリの場合は、それを開いて内容を調べます。 1) DIRECTORY INDEXの指定がありそのファイルがあれば、そのファイルを提供 例) index.html など。 2) ディレクトリ内のファイルの一覧を表示 最近はデフォルトでこの処理はさせないことが多い 3) ファイルがないと404を返す。 3) ディレクトリもファイルもない場合、/bbs を環境変数に格納して、/abc/hijについて同様の処理を行います。 4) 最終的にルートまで達すると、エラーを返しますが もしルートのDIRECTORY INDEXで指定してあるファイルが実行ファイルでしたら、それを処理します。 基本的には単純なこの処理の繰り返しです。 ※お分かりのように、/abc/hij/bbs はあくまでPATH_INFO パス情報ですから、実際にそのファイルが存在するかしないかとは、待ったく別の問題ですが、ブラウザは、それが実体だと認識しています。
- kmee
- ベストアンサー率55% (1857/3366)
基本ルールとして、次のようになります。 ○ 先頭が / で始まるものは絶対パスで、ルートディレクトリから辿っていく。 ○ それ以外は相対パスで、現在のディレクトリから辿っていく ○ . はそのディレクトリ自身、 .. は一つ上のディレクトリを表わす それを踏まえると > common.css 上記ルールから相対パス。 現在のディレクトリにあるcommon.css > ./common.css 上記ルールから相対パス。 . にあるcommon.css、つまり「現在のディレクトリ」にあるcommon.css ということで同じです。 /common.css 上記ルールから、絶対パス。 (サーバーで指定された)ルートディレクトリにあるcommon.css ということで ・現在のディレクトリがルートディレクトリなら同じ ・現在のディレクトリがルートディレクトリではないなら別 です。 > ./bbs > ./bbs/ これについては、HTTPサーバーの設定によっては別になる場合があります。 ローカルのファイルシステムだけを見た場合、 bbsというディレクトリと、同じ名前のファイルは同時には存在できません。(少なくとも、同時に存在するOSを私は知りません) ですが、HTTPサーバーとなると、URLのパスにあるディレクトリが実際に存在するファイル,ディレクトリでは無いケースもあります。 多くの場合 ・ ./bbs → bbsをファイルと解釈 → bbsファイルは無いが、 bbsディレクトリがあるので、bbsはディレクトリと解釈 → bbs/index.htmlをクライアントへ送信 ・ ./bbs/ → bbsはディレクトリと解釈 → bbsディレクトリがある → bbs/index.htmlをクライアントへ送信 と、同じ結果になります。 しかし、サーバーの設定によっては ・ ./bbs → ファイル名に拡張子が無いときは .htmlを補う という設定になっている → bbs.htmlと解釈 → bbs.htmlをクライアントへ送信 ・ ./bbs/ → bbsはディレクトリと解釈 → bbsディレクトリがある → bbs/index.htmlをクライアントへ送信 と違う結果になるケースもあります。
補足
ディレクトリなら ./bbs より ./bbs/ のほうがいいということですか?