14

大きなアプリの1つを分割し、「cdn」URLを導入して、CSS、JavaScript、画像などの一般的なオブジェクトを格納し、重複を回避しています。ただし、私が行う必要があるのは、開発環境用に個別の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'); }

異なるドメインを切り替えますか?

それに対処するための最良の方法は何ですか?

[編集]

誰もが明確に理解できるように、CDNアドレスはサイトとは異なるドメインです。したがって、開発サイトはhttp://www-dev.domain.comであり、 http://cdn-dev.domain.comを使用します。

4

9 に答える 9

26

絶対パスではなく、相対パスを使用します。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
于 2009-05-13T16:01:05.897 に答える
6

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

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

次に、ブラウザは現在のドメインの下を調べます。

于 2009-05-13T16:00:01.670 に答える
2

ビルドプロセスを作成し、テンプレートを使用して環境固有のファイルを生成することもできます

たとえば、yoursite.template.cssというファイル内

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

yoursite.cssファイルを作成してから、@@URL@@を目的のドメインに置き換えます。

于 2009-05-13T16:10:01.887 に答える
2

サーバーの構成によっては、ファイル名に.php-extensionを追加して、PHPスクリプトとして扱うこともできます。

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

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

これはJavaScriptファイルでも機能します。

于 2009-05-14T13:00:17.090 に答える
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に送信され、他のタイプのリクエストがプライマリサーバーに保持されます。

于 2009-05-13T16:00:40.890 に答える
1

これに対する答えも探して、私は単純なものを見ました。1つはシナリオ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を導入して、正しいクラスを呼び出します。

例えば

<body class="container<?PHP if ($whatever) {echo "-CDN";} ?>">
于 2011-05-12T11:45:23.030 に答える
0

サーバーが同じ場合は、相対パスを使用できます。/http/blah/test/images/button.pngまたは../images/button.pngのように

于 2009-05-13T16:01:08.237 に答える
0

相対URLを使用する場合、「ベース」URLを強制できます。<head>タグで、<basehref="http://cdn-dev.example.com">を使用します。次に、すべての相対リンク「/style.css」は「 http://cdn-dev.example.com/style.css」を指します。

参考:http ://www.w3schools.com/TAGS/tag_base.asp

于 2009-05-13T16:05:52.097 に答える
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";

?>

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

于 2009-05-13T16:12:48.390 に答える