2009-05-13 33 views
13

में डायनामिक यूआरएल मैं अपने बड़े ऐप्स में से एक को विभाजित कर रहा हूं और नकल से बचने के लिए सीएसएस, जावास्क्रिप्ट और छवियों जैसी सामान्य वस्तुओं को घर बनाने के लिए 'सीडीएन' यूआरएल पेश कर रहा हूं। मैं क्या करने की जरूरत है, हालांकि, हमारे देव वातावरण के लिए अलग-अलग 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

उत्तर

20

सापेक्ष पथ का उपयोग करें, पूर्ण पथ नहीं। जब एक सीएसएस फ़ाइल के अंदर, पथ सीएसएस फ़ाइल के सापेक्ष है, न कि HTML पृष्ठ।

अपने सीएसएस फ़ाइल यहाँ है

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

और अपने वर्ग

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

है तो फिर ब्राउज़र से

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

आमतौर पर मैं छवियों को एक सीएसएस थीम फ़ोल्डर के नीचे रखता हूं, क्योंकि यह मुझे छवि नामों का उपयोग करने की अनुमति देता है जो किसी विशेष स्टाइलशीट दस्तावेज़ के लिए विशिष्ट नहीं हैं। मैं/this_theme/और उसी फ़ाइल नाम के तहत/that_theme/के तहत एक बटन.png प्राप्त करने में सक्षम होगा और कक्षा परिभाषा वही रह सकती है। –

+0

पूर्ण/सापेक्ष यूआरआई के साथ सापेक्ष/पूर्ण यूआरआई पथों को भ्रमित न करें। क्योंकि '/ css/style.css' एक पूर्ण यूआरआई पथ है लेकिन एक सापेक्ष यूआरआई है। और 'http: // cdn.example.com/css/style.css' (' http: // 'से शुरू होता है) एक पूर्ण यूआरआई है लेकिन एक यूआरआई पथ नहीं है (इसमें केवल यूआरआई पथ है)। – Gumbo

+2

बेशक, यह केवल तभी काम करता है जब आप छवियों के समान सटीक डोमेन पर सीएसएस फ़ाइल होस्ट करते हैं, जो अक्सर –

5

का उपयोग डोमेन-रिश्तेदार यूआरएल का उपयोग करें?

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

फिर ब्राउज़र वर्तमान डोमेन के अंतर्गत दिखेगा।

1

मैं सचमुच आज एक ही चीज़ पर काम कर रहा हूं और यहां मैं जो आया हूं उसके साथ।

अपनी साइट की जड़ में अपनी .htaccess फ़ाइल में चिपकाएं। यह स्पष्ट रूप से अपाचे और 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

क्या सीडीएन के उद्देश्य को हराने नहीं है? इसका मतलब है कि सीडीएन को हर अनुरोध के लिए ग्राहक को अभी भी अपने सर्वर से संपर्क करना है, सीडीएन को सीधे मारना। – davr

+0

सच है, लेकिन सामग्री आपके सर्वर से परोसा नहीं जाएगा। तो आपके सर्वर से 5 एमबी एफएलवी वितरित किए जाने के बजाय। इसे सीडीएन पर रीडायरेक्ट किया जाएगा जहां वास्तविक डाउनलोड होगा। यह कॉन्फ़िगरेशन आपको बिना किसी बदलाव के आपके लाइव वातावरण में एक सर्वर विकास वातावरण से आसानी से स्वैप करने की अनुमति देता है। मैं इसे करने के लिए _the_ तरीके के रूप में वकालत नहीं कर रहा हूं। यह मेरे लिए काम करता है और 301 के लिए मिनीस्कूल राउंडट्रिप इसके लायक है। –

+0

यदि आपके पास सीडीएन और अन्य लोगों पर स्थानीय रूप से कुछ फ़ाइलें थीं तो यह कैसे काम करेगा? – dragonmantank

0

छवि को लोड करने तो सर्वर एक ही है की कोशिश करते हैं, तो , आप सापेक्ष पथ का उपयोग कर सकते हैं। /http/blah/test/images/button.png या सापेक्ष URL का उपयोग करते समय

0

../images/button.png की तरह, आप एक "आधार" Url मजबूर कर सकते हैं। < सिर > टैग में, का उपयोग < आधार href = "http://cdn-dev.example.com" >। फिर, हर रिश्तेदार लिंक "/ शैली।सीएसएस "इंगित करेगा करने के लिए" http://cdn-dev.example.com/style.css "

संदर्भ के लिए: http://www.w3schools.com/TAGS/tag_base.asp

+1

लेकिन इसके नुकसान भी हैं।उदाहरण के लिए, केवल एक खंड पहचानकर्ता 'foo' के साथ यूआरआई संदर्भों को उसी दस्तावेज़ में'/# foo' 'और केवल '# foo' तक हल नहीं किया जाएगा। – Gumbo

2

तुम भी पर्यावरण विशिष्ट फ़ाइलों

एक फ़ाइल में जैसे

yoursite.template.css कहा जाता है उत्पन्न करने के लिए एक निर्माण प्रक्रिया और आसान टेम्पलेट हो सकता है

.cool बटन {पृष्ठभूमि छवि: यूआरएल ('@@ यूआरएल @@/images/button.png');}

से डोमेन के साथ @@ यूआरएल @@ की जगह yoursite.css फ़ाइल बनाने आप चाहते हैं।

0

अच्छा ... जिस समाधान के साथ मैं आया था ... sorta ... हैकिश, बदसूरत और गूंगा। लेकिन, नरक, यह काम किया:

<?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"; 

?> 

यह, के रूप में बताया गया है, hacky और बदसूरत और कहीं अधिक सुंदरता से किया जा सकता है है। लेकिन, कम से कम, आपको मेजबान के आधार पर फ़ाइलों के विशिष्ट समूहों के लिए विशिष्ट स्थानों को परिभाषित करने की अनुमति देता है।

+0

और डोमेन-रिश्तेदार यूआरएल शायद, अधिक सुंदर और अधिक उपयोगी होंगे। मेरा सुझाव, मुझे लगता है, अन्यथा निजी जानकारी को जोड़ने के लिए और अधिक उपयोगी है (मैं डीबी पासवर्ड के लिए इस तरह की चीज का उपयोग करता हूं और ऐसे में वेब ऐप्स के लिए)। –

2

आपके सर्वर कॉन्फ़िगरेशन के आधार पर, आप भी अपनी फ़ाइल नामों को .php-विस्तार जोड़ सकते हैं और उन्हें PHP स्क्रिप्ट भी रूप में व्यवहार किया है:

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

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

यह भी जावास्क्रिप्ट फ़ाइलों के लिए काम करता है।

1

इसके उत्तर के लिए खोज रहे हैं, मैंने एक सरल देखा: अपनी सीएसएस फ़ाइल को डुप्लिकेट कक्षाओं के साथ बनाएं, एक परिदृश्य 1 (छवियों को उसी डोमेन से लोड करें) और दूसरा परिदृश्य 2 (छवियों को सीडीएन से लोड) के लिए बनाएं।

उदा।

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

फिर अपने index.php पर पीएचपी सही वर्ग कॉल करने के लिए

उदा परिचय

<body class="container<?PHP if ($whatever) {echo "-CDN";} ?>"> 
+0

मुझे यह सबसे अच्छा लगता है, टिप के लिए धन्यवाद। सैस के साथ इसका उपयोग करना बहुत आसान होना चाहिए। – TWilly