2012-04-01 12 views
12

मेरे पास एक डोमेन नाम है: TestSite.com। मैं इस साइट के लिए कई उप डोमेन बना सकते हैं और first.TestSite.com, second.TestSite.com के रूप में उन्हें का उल्लेख, आदिअपने डोमेन को हार्ड-कोडिंग किए बिना मुख्य डोमेन का संदर्भ कैसे लें?

मैं कैसे हार्ड कोड के लिए एक में इसका नाम बिना TestSite.com अपेक्षाकृत किससे संबंधित होते हैं एचटीएमएल या एएसपीएक्स फ़ाइल पहले .estSite.com? से पहले मैं

द्वारा अपनी मूल TestSite फ़ोल्डर का उल्लेख कर सकते हैं, (उदाहरण के रूप में फ़ोल्डर का उपयोग) अगर मैं एक फ़ोल्डर TestSite और एक उप फ़ोल्डर पहले

TestSite/पहले

है तो क्या मेरा मतलब है

../

क्या मैं first.TestSite.com से TestSite.com का उल्लेख करने के प्रयोग करते हैं? धन्यवाद।

+2

फ़ोल्डर एक नेस्टेड पदानुक्रम हैं। सबडोमेन नहीं हैं। सबडोमेन जावास्क्रिप्ट और कुकीज़ और एसएसएल प्रमाणपत्रों के लिए समस्याएं पेश कर सकते हैं। यह इमेज कैशिंग जैसी चीजों के लिए भी समस्याएं पेश कर सकता है - finding.tif.com से blank.gif एक ही छवि test.g.com से blank.gif के समान छवि है? यह एक ब्राउज़र के लिए नहीं है। –

+0

सबडोमेन खोज इंजन मकड़ियों और रैंकिंग के लिए भी समस्याएं पैदा कर सकते हैं, यदि यह आपके मामले में मायने रखता है। –

+0

@BrianWhite सही एसएसएल है। इसके अतिरिक्त, एसएसएल केवल एक आईपी पते (अपाचे के साथ) के साथ काम करेगा। इसलिए यदि आपके पास प्रत्येक सबडोमेन के लिए एसएसएल कर्ट खरीदने के लिए पैसा था, तो उन्हें अपने स्वयं के आईपी रखना होगा। जो आपकी आईएसपी सीमाओं के आधार पर संभव नहीं हो सकता है। – cgTag

उत्तर

11

शुद्ध रिश्तेदार लिंक का उपयोग करने का कोई तरीका नहीं है। आपको इसे स्ट्रिंग मैनिपुलेशन के रूप में प्रोग्राम करना होगा।

कुछ की तरह:

var host = location.host; 
var lastPeriod = host.lastIndexOf("."); 
var remainder = host.substring(0, lastPeriod); 
var afterSecondLastPeriod = remainder.lastIndexOf('.') + 1 
var baseDomain = host.substring(afterSecondLastPeriod); 
console.log(baseDomain); 

संपादित करें: छोटा संस्करण regex का उपयोग कर: यह हमेशा आखिरी हिस्सा वापस आ जाएगी तो

var baseDomain = host.match(/[^.]*\.[^.]*$/)[0] 

यह सामान्य है। भले ही यह a.TestSite.com, b.a.TestSite.com इत्यादि है, यह TestSite.com लौटाएगा।

यदि यह धारणा सही नहीं है तो आपको इसे संशोधित करना होगा।

5

यदि आप अपने सापेक्ष लिंक रखना चाहते हैं, तो आप base तत्व का उपयोग कर सकते हैं।

[आधार तत्व के href] विशेषता एक निरपेक्ष यूआरआई कि आधार रिश्तेदार यूआरआई हल करने के लिए यूआरआई के रूप में कार्य निर्दिष्ट करता है।

तो, एक base तत्व जोड़ सकती निर्दिष्ट href आप चाहते हैं, और पृष्ठ पर सभी रिश्तेदार यूआरआई अब URI का उपयोग आप आधार यूआरआई के रूप में निर्दिष्ट किया है।

<head> 
   <base href="http://testsite.com" /> 
</head> 

आपको बस इतना ही चाहिए। हालांकि, अगर आप चीजों को थोड़ा क्लीनर बनाना चाहते हैं, तो आप System.Configuration. ConfigurationManager . AppSettings का उपयोग कर उस यूआरआई को web.config से खींच सकते हैं।

<head> 
   <base href="<%= ConfigurationManager.AppSettings["rootdomain"] %>" /> 
</head> 

और web.config: यहाँ एक aspx स्निपेट

<configuration> 
    <appSettings> 
    <add name="rootdomain" value="http://testsite.com" /> 
    </appSettings> 
</configuration> 

यह विधि आपको एक और अपने मूल्य web.config से संचालित किया जा सकता से कई तत्वों को प्रभावित कर सकते हैं।

1

चूंकि आपने अपना प्रश्न एएसपी टैग किया है।नेट, मुझे लगता है कि आप इस सर्वर-साइड को करना चाहते हैं, इसलिए आप एचटीएमएल लिंक बनाने के लिए क्लाइंट-साइड पर जावास्क्रिप्ट पर निर्भर नहीं हैं।

सभी की

सबसे पहले, सुनिश्चित करें कि आप अपने उप डोमेन साइटों में एक web.config फ़ाइल है, और विन्यास से जोड़ें: अपने उप डोमेन में से एक पर

<configuration> 
    <appSettings> 
    <add name="MainDomain" value="example.com" /> 
    </appSettings> 
</configuration> 

अपने ASPX पृष्ठों में इस सेटिंग का उपयोग, हाइपरलिंक 'पृष्ठों इस प्रकार दिखाई देगा:

<a href="<%$ AppSettings: MainDomain %>">Go to main domain home page</a> 
<a href="<%$ AppSettings: MainDomain %>/products.aspx">Go to products page on the main domain</a> 

name="MainDomain" साथ सेटिंग विन्यास फ़ाइल से पढ़ने की जाएगी, और पेज जहां लिखा है <%$ AppSettings: MainDomain %> में डाला। इस तरह, आप सर्वर-साइड पर आवश्यक HTML बना रहे हैं, बिना किसी हार्ड-कोडिंग की आवश्यकता है।

यदि आपको नाम बदलने की आवश्यकता है, तो बस कॉन्फ़िगरेशन फ़ाइल अपडेट करें, और सभी पृष्ठ स्वचालित रूप से नए डोमेन नाम का उपयोग करेंगे।

1

एक वैकल्पिक समाधान लाइव सर्वर के लिए मूल डोमेन नाम का उपयोग करना होगा, लेकिन इसे अपने विकास पर्यावरण पर इंगित करें।

आप इस फ़ाइल में लाइन जोड़कर विंडोज़ में DNS लुकअप को ओवरराइड कर सकते हैं।

C: \ Windows \ System32 \ drivers \ etc \ मेजबान

एक पाठ संपादक का उपयोग निम्नलिखित जोड़ें।

127.0.0.1 www.livesite.com 
127.0.0.1 first.livesite.com 
127.0.0.1 second.livesite.com 

ये डोमेन अब लोकहोस्ट पर मानचित्रित होंगे। तो परीक्षण के लिए एचटीएमएल हैक करने की आवश्यकता नहीं होगी।

+1

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

+1

@ ब्रायन: 127.0.0.1 को एकाधिक होस्टनामों को इंगित करने के साथ कुछ भी गलत नहीं है, किसी भी अन्य आईपी पते पर एकाधिक होस्टनामों को इंगित करने के अलावा कहीं भी कुछ भी नहीं है। हालांकि, इसका मतलब यह है कि आपको नाम-आधारित वर्चुअल होस्टिंग करने के लिए अपने विकास वेबसर्वर को कॉन्फ़िगर करने की आवश्यकता है (जब तक कि आप अपनी सभी विकास साइटों को समान दिखने के लिए न दें)। –

+0

@BrianWhite अधिकांश वेब डेवलपर्स मेजबानों का उपयोग अपने डोमेनहोस्ट में एकाधिक डोमेन को इंगित करने के लिए करते हैं। अन्यथा एक और वेबसाइट पर काम करना संभव नहीं है। स्थानीयहोस्ट से बाहर निकलने के लिए केवल एक साइट को कॉन्फ़िगर किया जा सकता है। मैं जो करता हूं वह मेरी सभी साइटों के लिए .com से .local को बदलता है। उदाहरण; www.thinkingmedia.ca मेरी dev मशीन पर www.thinkingmedia.local बन जाता है। मेरे पास वर्तमान में 50+ स्थानीय साइटें बिना किसी समस्या के चल रही हैं। क्षमा करें आपको परेशानी थी, लेकिन यदि आप मुद्दों के बारे में एक नया सवाल शुरू करते हैं। मुझे मदद करने में खुशी होगी। – cgTag

संबंधित मुद्दे