人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

apache2 + passengerで Ruby on Railsの勉強をしています。

http://maskana.homedns.org/rails/pro/body/142 に従って複数のRailsアプリを動かす環境は作れたのですが、CSS内での URL指定の方法がよくわかりません。

たとえば http://www.example.com/App1/ でアプリが動作しているとき、スタイルシートを以下のように定義して td要素のバックグラウンドに sample.pngを表示させたいという場合です。
td.sample {
background-image: url("/images/sample.png");
}

このように書くと、出力されるHTMLでは
http://www.example.com/images/sample.png
が参照されてしまいます。これを
http://www.example.com/App1/images/sample.png
のように出力させるにはどうすれば良いのでしょうか。

デバッグ時と実行環境でCSSを書き換えるのは間違いが起きやすいので、CSSを書き直さずに済む方法を探しています。

Railsは 2.2.2 もしくは 2.3.5の環境で試しています。

●質問者: Nunocky
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:background-image CSS HTML Passenger PNG
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● rouge_2008
●60ポイント ベストアンサー

mod_rewriteで解決してはいかがでしょうか?

【.htaccessに記述する場合】

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_REFERER} /App1/
RewriteRule ^/?images/(.+)\.(png|gif|jpg|jpeg)$ /App1/images/$1.$2 [L]

上記の.htaccessをWEBルート直下(http://www.example.com/)に配置します。

このようにすると、CSSの記述はそのまま(WEBルートからの相対パス)で、App1配下にあるimages内の画像が参照されます。

【Apacheの設定ファイルに記述する場合】

<VirtualHost *:80>
 DocumentRoot (...略)
 RailsBaseURI /App1
 <Directory />
 (...略)
 RewriteEngine On
 RewriteBase /
 RewriteCond %{HTTP_REFERER} /App1/
 RewriteRule ^/?images/(.+)\.(png|gif|jpg|jpeg)$ /App1/images/$1.$2 [L]
 </Directory>
</VirtualHost>

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html


Passengerでmod_rewriteを使用する方法は、次を参考にしてください。

http://underrails.seesaa.net/category/3803779-1.html

http://www.modrails.com/documentation/Users%20guide%20Apache.htm...

◎質問者からの返答

ご解説ありがとうございます。 .htaccessに mod_rewriteのルールを書く方法で画像が正しく表示されることが確認できました。 Apacheの設定ファイルに書くよりも .htaccessを変更する方が全体への影響が小さそうなので、前者の方法で運用してみたいと思います。

どうもありがとうございました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ