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の環境で試しています。
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を変更する方が全体への影響が小さそうなので、前者の方法で運用してみたいと思います。
どうもありがとうございました!