2009-05-13 10 views
13

大きなアプリの1つを分割し、重複を避けるためにCSS、JavaScript、イメージなどの共通オブジェクトを格納する 'cdn' URLを導入しています。私は何をする必要があるか、しかし、私たちのdevの環境用に別のURLを持っているので、私が持っていることである:。CSS/JSの動的URL

http://cdn-dev.example.com 
http://cdn-qua.example.com 
http://cdn.example.com 

私たちが取り組んでいるものを、環境に応じて、私はこれが生成されているもののために仕事を得ることができます私たちのPHPコードでは、私は、.cssファイルと.jsファイルが失われてしまいます。たとえば、次のようにするにはどうすればいいですか?

.cool-button { background-image: url('http://cdn.example.com/images/button.png'); } 

ドメインを切り替えるにはどうすればよいですか?

これを処理するにはどうすればよいですか?

[EDIT]

ちょうどので、誰もがクリアされ、CDNアドレスは、異なるドメインのサイトです。だから、devサイトはhttp://www-dev.domain.comとなるでしょうhttp://cdn-dev.domain.com

答えて

20

絶対パスではなく相対パスを使用します。 CSSファイルの内部では、パスはHTMLファイルではなく、CSSファイルからの相対パスです。

あなたのCSSファイルは、ここで

http://cdn.example.com/css/style.css 

であり、あなたのクラスは

.cool-button { background-image: url('../images/button.png'); } 

あるサーバーが同じであれば、ブラウザは

http://cdn.example.com/images/button.png 
+0

通常、私は特定のスタイルシート文書に特有ではない画像名を使用できるので、画像フォルダをCSSテーマフォルダの下に置きます。/this_theme /の下にbutton.pngがあり、/ that_theme /の下に同じファイル名を持つことができ、クラスの定義は変わらない。 –

+0

絶対/相対URIパスと相対/絶対URIパスを混同しないでください。 '/ css/style.css'は絶対URIパスであるが、相対URIであるためです。そして 'http:// cdn.example.com/css/style.css'(' http:// 'で始まる)は絶対URIですが、URIパスではありません(URIパスのみを含みます)。 – Gumbo

+2

もちろん、これは画像と全く同じドメイン上にCSSファイルをホストする場合にのみ有効です(多くの場合そうではありません)。 –

5

ドメイン相対URLを使用するだけですか?

.cool-button { background-image: url('/images/button.png'); } 

ブラウザが現在のドメインの下に表示されます。

1

私は文字通り、今日も同じことに取り組んできました。ここで私が思いついたのはこれです。

これは、サイトのルートにある.htaccessファイルに貼り付けてください。これは明らかにApacheとMod_rewriteに依存しています。

RewriteEngine on 
RewriteBase/

# Redirect content to the CDN 

RewriteCond %{HTTP_HOST} !^cdn\.server\.com$ [NC] 
RewriteRule .*\.(jpg|gif|png|flv|css|js|swf)$ http://cdn.server.com/$0 [R=301,L] 

これはあなたのCDNに括弧内のファイルの種類のリクエストを送信して、プライマリサーバ上の他のタイプの要求を維持します。

+0

CDNの目的を破るものではありませんか?つまり、クライアントは、CDNへのすべての要求に対して、依然としてサーバーに接続しなければならず、CDNに直接アクセスする必要があります。 – davr

+0

真ですが、コンテンツはサーバーから配信されません。したがって、あなたのサーバーから配信される5MbのFLVの代わりに。実際のダウンロードが行われるCDNにリダイレクトされます。この構成により、単一のサーバー開発環境から変更なしでライブ環境に簡単にスワップできます。私はこれを行う方法としてこれを主張していません。それは私のために働くと301のための僅かな往復はそれに値するです。 –

+0

CDNやその他のローカルファイルにいくつかのファイルがあった場合、どのように動作しますか? – dragonmantank

0

から画像をロードしようとした場合相対パスを使用することができます。 like /http/blah/test/images/button.pngまたは../images/button.png

0

相対URLを使用する場合、「ベース」URLを強制することができます。 ヘッド>タグでは、<ベースhref = "http://cdn-dev.example.com" >を使用してください。その後、すべての相対リンク "/スタイル。CSSは、参考のためhttp://cdn-dev.example.com/style.css

」を指すようになります』:http://www.w3schools.com/TAGS/tag_base.asp

+1

しかし、これには欠点もあります。例えば、フラグメント識別子 'foo'だけのURI参照は、同じ文書内の'#foo'ではなく '/#foo'に解決されます。 – Gumbo

2

また、環境、特定のファイルにyoursite.template.css

というファイルに

などを生成するために、ビルドプロセスを持っているし、使用テンプレートをすることができます

.coolボタン{背景画像:URL( '@@ URL @@ /画像/ button.png');}

はドメインと@@ URLを@@置き換えるよりyoursite.cssファイルを作成しますあなたは欲しい。

0

まあ...私が思いついた解決策は...まあまあ...ハッキリ、醜いとダム。しかし、地獄、それが働いた:

<?php 
    if ($_SERVER['SERVER_NAME'] == "www.domain.tld") { 

     $incs_path = "/usr/local/psa/home/vhosts/domain.tld/non-web-root-folder/private-files"; 

    } 
    else { 
     $incs_path = "incs"; 
    } 

require_once "$incs_path/$file-to-be-called.inc"; 

?> 

をこれが述べたように、ハックと醜いですとはるかにかわいらしく行うことができます。しかし、少なくとも、ホストに応じて特定のファイルグループの特定の場所を定義することができます。

+0

とドメイン相対URLは、おそらくもっときれいで便利です。私の提案は、そうでなければ私的な情報へのリンクに役立つと思います(私はこのようなものをdbパスワードなどのウェブアプリケーション用に使用する傾向があります)。 –

2

サーバーの構成に応じて、また、あなたのファイル名に.PHP-拡張子を付加し、それらがあまりにもPHPスクリプトとして扱うことができます:

I.E.: style.css.php would contain: 

.cool-button { background-image url(<?php echo $bgImgUrl;?>); } 

これはまた、JavaScriptの-ファイルに対して動作します。

1

シナリオ1(同じドメインからの画像読み込み)とシナリオ2(CDNからの画像読み込み)の別のクラスを使用してCSSファイルを作成しました。

.container {background-image:url(my/site/image.png;)} 
.container-CDN {background-image:url(http://my.site.cdn.com/image.png;)} 

は、その後、あなたのindex.phpに

例えば適切なクラスを呼び出すためにPHPを導入します

+0

私はこれが最高です、チップのおかげで。これを使用すると、かなり簡単になるはずです。 – TWilly