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の環境で試しています。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/10/23 14:32:41
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント60pt

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...

id:Nunocky

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

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

2010/10/23 14:31:46

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません