質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

8440閲覧

相対パスでCSS内に画像のパスを指定する際の仕様について

sekiyama

総合スコア11

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2015/04/16 08:20

CSSファイルに記述されている画像を参照するパスを、「/img/hoge.png」と絶対パスで指定されているものから「../../../img/hoge.png」と相対指定に変更する必要があります)。

しかし実際のディレクトリ構成としては

├── img │ └── hoge.png └── css └── hoge1 └── hoge.css

となっています。
hoge.cssからhoge.pngへの参照は正しくは「../../img/hoge.png」となりますが、事情があり「../../../img/hoge.png」と「../」がひとつ多い状態で記述する必要があります(事情についての説明は割愛します」。

「../」が多い分には「/img/〜」と絶対パス指定と同様の扱いになり、問題なく画像が参照できている事は確認したのですが、これはApacheの仕様でこうなっているのでしょうか?

もしこれがブラウザによるものだとすれば、機種によって画像が表示されない様な事が起こる可能性もありそうです。

どうぞ宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

http://localhost:8888/hoge/css/hogecss/hoge.css

このCSSに以下のように定義しました
#aaa {
background-image: url("../../img/hoge.png");
}

そしてブラウザからリクエストされたURLがこちらです
http://localhost:8888/hoge/img/hoge.png
ちゃんと画像は表示されました。

また、質問者様がおっしゃるように、../ を1つ余分につけ、CSSに以下のように定義しました
#aaa {
background-image: url("../../../img/hoge.png");
}

ブラウザからリクエストされたURLがこちらです
http://localhost:8888/img/hoge.png
このURLには画像が存在しないため、画像は表示されませんでした。

つまり
「「../」が多い分には「/img/〜」と絶対パス指定と同様の扱いになり」ということは無いと思うのですが…。

もし、絶対パス指定と同様の扱いになっているのであれば、Apacheのmod_rewriteなどを用いて
リクエストされたURLを書き換えていたりしませんでしょうか。

質問内容を勘違いしていたらすみません。
※Chromeで実験しました

投稿2015/04/16 08:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sekiyama

2015/04/16 09:08

あ、申し訳ございません。 説明不足でした。 確かにご提示頂いているパターンでは「/img/hoge.png」と「../../../img/hoge.png」が同様のパスとして扱われる事は無いですね。 今回自分が悩んでるパターンは、 http://localhost:8888/hoge/css/hoge.css から http://localhost:8888/img/hoge.png を参照する様なパターンでして、 その場合だと正しい指定は「../../img/hoge.png」となりますが、これを「../../../img/hoge.png」と指定しても同様に画像が参照されると言う現象についてです。 これはhttp://localhost:8888/がドキュメントルートとなり、それ以上ディレクトリを遡ろうとしてもそれより上位のディレクトリが無いため、 極端な話、「../../../../../../../../img/hoge.png」と指定したとしても「/img/hoge.png」と指定した場合と同様に扱われる様で、この仕様を制御しているのが何なのかを知りたかったのです。
sekiyama

2015/04/16 09:15

すみません、間違えました 誤) 確かにご提示頂いているパターンでは「/img/hoge.png」と「../../../img/hoge.png」が同様のパスとして扱われる事は無いですね。 正) 確かにご提示頂いているパターンでは「/img/hoge.png」と「../../img/hoge.png」が同様のパスとして扱われる事は無いですね。
退会済みユーザー

退会済みユーザー

2015/04/16 09:42

なるほど、そういうことでしたか。 画像へのURLを以下のようにして実験してみました。 #aaa { background-image: url("../../../../../../../../../../img/hoge.png"); } Chromeがリクエストした画像へのURLは以下ようになりました。 http://localhost:8888/img/hoge.png よって、この挙動はブラウザが制御しているということになりますね。 ※ブラウザがこのような挙動をするって初めて知りました。勉強になります。
sekiyama

2015/04/17 01:37

実験ありがとうございます! Chrome、Safari等主要なブラウザで検証しましたが、同様の挙動でした。 ひとまず問題無さそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問