Html <आधार> टैग के लिए क्या सिफारिशें हैं?


462

मैंने पहले कभी भी कहीं भी इस्तेमाल किए गए <base>HTML टैग को नहीं देखा है । क्या इसके उपयोग के नुकसान हैं यानी मुझे इससे बचना चाहिए?

तथ्य यह है कि मैंने इसे आधुनिक उत्पादन साइट (या किसी भी साइट) पर उपयोग करने पर कभी गौर नहीं किया है, हालांकि यह मुझे ऐसा लगता है, हालांकि ऐसा लगता है कि मेरी साइट पर लिंक को सरल बनाने के लिए उपयोगी अनुप्रयोग हो सकते हैं।


संपादित करें

कुछ हफ्तों के लिए आधार टैग का उपयोग करने के बाद, मैंने आधार टैग का उपयोग करने के साथ कुछ प्रमुख गोचरों को ढूंढना समाप्त कर दिया जो इसे पहले दिखाई देने की तुलना में बहुत कम वांछनीय बनाते हैं। मूल रूप से, बेस टैग के तहत href='#topic'और उनके डिफ़ॉल्ट व्यवहार के साथ परिवर्तन बहुत असंगत हैं, और डिफ़ॉल्ट व्यवहार से यह परिवर्तन आसानी से आपके नियंत्रण से बाहर तीसरे पक्ष के पुस्तकालयों को बहुत अविश्वसनीय बना सकता है।href='' अप्रत्याशित तरीकों से, क्योंकि वे तार्किक रूप से डिफ़ॉल्ट व्यवहार पर निर्भर होंगे। अक्सर परिवर्तन सूक्ष्म होते हैं और बड़े कोडबेस से निपटने के दौरान तुरंत-स्पष्ट समस्याएं नहीं होती हैं। जब से मैंने नीचे दिए गए मुद्दों का विवरण दिया है, मैंने उत्तर दिया है। इससे पहले कि आप एक व्यापक तैनाती के लिए प्रतिबद्ध हों <base>, मेरे लिए लिंक परिणामों का परीक्षण करें , क्या मेरी नई सलाह है!


12
लिंक का काम करते रहने के लिए अक्सर इसका उपयोग खोज इंजन परिणामों के कैश्ड संस्करणों में किया जाता है।
गमबो

11
बस ध्यान दें: बेस टैग भी सरल एंकरों के साथ बातचीत करता है, इसलिए यदि आप बेस का उपयोग करते हैं, तो पहले जो पेज पर किसी स्थान के लिए केवल एक एंकर था, <a href='#anchor1'>Anchor1</a>वह बेस टैग का उपयोग करेगा, साथ ही वर्तमान पृष्ठ का संदर्भ देने के डिफ़ॉल्ट व्यवहार को भी अनदेखा करेगा। आधार। तो यह निश्चित रूप से देखने के लिए कुछ है (हालांकि यह पृष्ठों में एक और आधार टैग का उपयोग करके तय किया जा सकता है जो बहुत सारे एंकर का उपयोग करते हैं)।
17

1
यदि आप स्वीकृत उत्तर से खुश नहीं हैं, तो आप इसे अस्वीकार क्यों नहीं करते हैं और इसे फिर से असाइन नहीं करते हैं?
पोप

1
नहीं पता था कि यह एक विकल्प था, लेकिन हाँ, दोहराना नहीं चाहते हैं (अगर यह भी मुझे अंक देता है), लेकिन मुझे लगता है कि अंतिम विश्लेषण में, नुकसान फायदे पल्ला झुकना चाहते हैं, और उस पर प्रकाश डालना चाहते हैं।
Kzqai

2
आप आमतौर पर आपके द्वारा जाने वाली प्रत्येक प्रमुख साइट के स्रोत कोड को नहीं देखते हैं। मेरा मानना ​​है कि <base>जितना आप सोचेंगे उससे ज्यादा लोग इस्तेमाल कर रहे हैं ।
मथियास लिकेगार्ड लोरेनजेन

जवाबों:


259

<base>टैग का उपयोग करने या न करने का निर्णय लेने से पहले , आपको यह समझने की आवश्यकता है कि यह कैसे काम करता है, इसका क्या उपयोग किया जा सकता है और इसके निहितार्थ क्या हैं और अंत में फायदे / नुकसान को पछाड़ दें।


<base>टैग मुख्य रूप से भाषाओं templating के रूप में आप में वर्तमान संदर्भ के बारे में चिंता की जरूरत नहीं है में संबंधित लिंक्स बनाने को आसान बनाता है हर लिंक।

आप उदाहरण के लिए कर सकते हैं

<base href="${host}/${context}/${language}/">
...
<link rel="stylesheet" href="css/style.css" />
<script src="js/script.js"></script>
...
<a href="home">home</a>
<a href="faq">faq</a>
<a href="contact">contact</a>
...
<img src="img/logo.png" />

के बजाय

<link rel="stylesheet" href="/${context}/${language}/css/style.css" />
<script src="/${context}/${language}/js/script.js"></script>
...
<a href="/${context}/${language}/home">home</a>
<a href="/${context}/${language}/faq">faq</a>
<a href="/${context}/${language}/contact">contact</a>
...
<img src="/${context}/${language}/img/logo.png" />

कृपया ध्यान दें कि <base href>मान एक स्लैश के साथ समाप्त होता है, अन्यथा इसे अंतिम पथ के सापेक्ष व्याख्या किया जाएगा।


ब्राउज़र संगतता के रूप में, यह IE में केवल समस्याएं पैदा करता है। <base>टैग HTML के रूप में निर्दिष्ट में है नहीं समाप्त टैग होने </base>, तो यह सिर्फ उपयोग करने के लिए कानूनी है <base>एक अंत के बिना। हालांकि IE6 अन्यथा सोचता है और संपूर्ण सामग्री के बाद<base> टैग के रूप में रखा तरह के मामले में है बच्चे के <base>HTML डोम पेड़ में तत्व। यह जावास्क्रिप्ट / jQuery / CSS में प्रथम दृष्टिहीन समस्याओं का कारण बन सकता है, अर्थात विशिष्ट चयनकर्ताओं में पूरी तरह से अनुपलब्ध होने जैसे तत्व html>body, जब तक आप HTML DOM निरीक्षक में खोजते हैं कि बीच में base(और head) होना चाहिए ।

एक आम IE6 तय अंत टैग शामिल करने के लिए एक IE सशर्त टिप्पणी का उपयोग कर रहा है:

<base href="http://example.com/en/"><!--[if lte IE 6]></base><![endif]-->

यदि आप W3 मान्यकर्ता के बारे में परवाह नहीं करते हैं, या जब आप एचटीएमएल 5 पर पहले से ही हैं, तो आप इसे केवल स्वयं बंद कर सकते हैं, हर वेबब्रोसर वैसे भी इसका समर्थन करता है:

<base href="http://example.com/en/" />

<base>टैग को बंद करना भी WinXP SP3 पर IE6 के पागलपन को तुरंत ठीक करता है, एक अनंत लूप में एक <script>रिश्तेदार URI के साथ संसाधनों का अनुरोध करने के लिए src

एक अन्य संभावित आईई समस्या प्रकट जब आप में एक सापेक्ष URI का उपयोग करेगा <base>जैसे टैग, <base href="https://stackoverflow.com//example.com/somefolder/">या <base href="https://stackoverflow.com/somefolder/">। यह IE6 / 7/8 में विफल रहेगा। हालांकि यह वास्तव में ब्राउज़र की गलती नहीं है; <base>टैग में रिश्तेदार URI का उपयोग करना गलत है। HTML4 विनिर्देश ने कहा कि यह एक निरपेक्ष यूआरआई होना चाहिए, इस प्रकार के साथ शुरू http://या https://योजना। इसे एचटीएमएल 5 विनिर्देशन में हटा दिया गया है । इसलिए यदि आप HTML5 का उपयोग करते हैं और केवल HTML5 संगत ब्राउज़र को लक्षित करते हैं, तो आपको <base>टैग में किसी रिश्तेदार URI का उपयोग करके सभी ठीक होना चाहिए ।


नामित का उपयोग करने के लिए के रूप में / हैश टुकड़ा लंगर की तरह <a href="#anchor">, जैसे क्वेरी स्ट्रिंग एंकर <a href="?foo=bar">और की तरह पथ टुकड़ा लंगर <a href=";foo=bar">, साथ <base>टैग आप मूल रूप से घोषणा कर रहे सभी संबंधित लिंक्स यह के सापेक्ष, सहित एंकर के उन तरह। कोई भी संबंधित लिंक वर्तमान अनुरोध URI के सापेक्ष नहीं है (जैसा कि <base>टैग के बिना होगा )। यह पहली जगह में शुरुआत के लिए भ्रामक हो सकता है। उन एंकरों का सही तरीके से निर्माण करने के लिए, आपको मूल रूप से URI को शामिल करना होगा,

<a href="${uri}#anchor">hash fragment</a>
<a href="${uri}?foo=bar">query string</a>
<a href="${uri};foo=bar">path fragment</a>

जहाँ ${uri}मूल रूप $_SERVER['REQUEST_URI']से PHP में, ${pageContext.request.requestURI}JSP में और #{request.requestURI}JSF में अनुवाद किया जाता है । ध्यान दिया जाना चाहिए कि जेएसएफ जैसे एमवीसी फ्रेमवर्क में इस सभी बॉयलरप्लेट को कम करने और इसकी आवश्यकता को दूर करने के लिए टैग हैं <base>अन्य JSF पेजों को लिंक / नेविगेट करने के लिए ao What URL का उपयोग करने के लिए भी देखें ।


BalusC, उसी समय के बारे में जब मैंने यहां उत्तर लिखा था stackoverflow.com/a/46539210/632951 इस धागे के नीचे 10+ उपयोगी टिप्पणियाँ थीं, जिन्हें कई लेखकों ने 8 साल से अधिक समय तक <आधार> के बारे में जानकारी देते हुए पोस्ट किया था। कोई भी विचार जो टिप्पणियों को जोड़ता है उसे स्थानांतरित कर दिया गया है?
पचेरियर

162

आधार टैग के प्रभाव का टूटना:

बेस टैग में कुछ गैर-सहज प्रभाव दिखाई देते हैं, और मैं परिणामों के बारे में पता होने और उन्हें भरोसा करने से पहले अपने लिए परीक्षण करने की सलाह देता हूं <base>! चूंकि मैंने उन्हें अलग-अलग यूआरएल के साथ स्थानीय साइटों को संभालने के लिए आधार टैग का उपयोग करने की कोशिश करने के बाद पता लगाया है और केवल अपने निराशाजनक परिणाम के बाद समस्याग्रस्त प्रभावों का पता लगाया है, इसलिए मैं दूसरों के लिए इन संभावित नुकसानों का सारांश बनाने के लिए मजबूर महसूस करता हूं।

मैं आधार टैग का उपयोग करूँगा: <base href="http://www.example.com/other-subdirectory/">नीचे दिए गए मामलों में मेरे उदाहरण के रूप में, और यह दिखाऊंगा कि कोड जिस पृष्ठ पर है वह http://localsite.com/original-subdirectory

मेजर:

कोई लिंक या नामांकित एंकर या रिक्त hrefs मूल उपनिर्देशिका को इंगित नहीं करेंगे, जब तक कि यह स्पष्ट नहीं किया जाता है: आधार टैग सब कुछ लिंक को अलग-अलग बनाता है , जिसमें आधार-टैग के url के बजाय एक ही-पृष्ठ एंकर लिंक शामिल हैं, जैसे:

  • <a href='#top-of-page' title='Some title'>A link to the top of the page via a named anchor</a>
    हो जाता है
    <a href='http://www.example.com/other-subdirectory/#top-of-page' title='Some title'>A link to an #named-anchor on the completely different base page</a>

  • <a href='?update=1' title='Some title'>A link to this page</a>
    हो जाता है
    <a href='http://www.example.com/other-subdirectory/?update=1' title='Some title'>A link to the base tag's page instead</a>

कुछ काम के साथ, आप इन समस्याओं को उन लिंक पर ठीक कर सकते हैं जिन पर आपका नियंत्रण है, यह स्पष्ट रूप से निर्दिष्ट करके कि ये लिंक उस पेज के लिंक हैं जो वे चालू हैं, लेकिन जब आप मानक व्यवहार पर भरोसा करने वाले मिश्रण में तृतीय-पक्ष लाइब्रेरी जोड़ते हैं, यह आसानी से एक बड़ी गड़बड़ पैदा कर सकता है।

माइनर:

IE6 फिक्स जिसमें सशर्त टिप्पणियों की आवश्यकता होती है: डोम पदानुक्रम को खराब करने से बचने के लिए ie6 के लिए सशर्त टिप्पणियों की आवश्यकता होती है, अर्थात ऊपर दिए गए अपने उत्तर में उल्लेख के <base href="http://www.example.com/"><!--[if lte IE 6]></base><![endif]-->रूप BalusCमें।

तो कुल मिलाकर, प्रमुख समस्या तब तक मुश्किल हो जाती है जब तक कि आपके पास हर लिंक पर पूर्ण संपादन नियंत्रण न हो, और जैसा कि मैंने मूल रूप से आशंका जताई है, कि यह मूल्य की तुलना में अधिक परेशानी पैदा करता है। अब मुझे दूर जाना है और इसके सभी उपयोगों को फिर से लिखना है! : p

"टुकड़े" / हैश का उपयोग करते समय मुद्दों के लिए परीक्षण के संबंधित लिंक:

http://www.w3.org/People/mimasa/test/base/

http://www.w3.org/People/mimasa/test/base/results


Izzy द्वारा संपादित करें: आप सभी के लिए एक ही भ्रम में चल रहा है जैसा कि टिप्पणियों से संबंधित है:

मैंने अभी इसका परीक्षण किया है, निम्नलिखित परिणामों के साथ:

  • स्लेश या न करने पर, यहां दिए गए उदाहरणों से कोई फ़र्क नहीं पड़ता ( #anchorऔर ?queryबस निर्दिष्ट पर संलग्न किया जाएगा <BASE>)।
  • हालांकि यह सापेक्ष लिंक के लिए एक अंतर बनाता है: अनुगामी स्लैश को छोड़ना, other.htmlऔर दिए गए उदाहरण dir/other.htmlके DOCUMENT_ROOTसाथ शुरू होगा , /other-subdirectoryसही (सही) फ़ाइल के रूप में माना जाता है और इस प्रकार छोड़ा गया है।

रिश्तेदार लिंक के लिए, BASEस्थानांतरित पृष्ठ के साथ ठीक काम करता है - जबकि एंकर और ?queriesफ़ाइल नाम की आवश्यकता होगी स्पष्ट रूप से निर्दिष्ट किया जाएगा ( BASEएक अनुगामी स्लेश होने के साथ , या अंतिम तत्व जो उस फ़ाइल के नाम के अनुरूप नहीं है जो इसमें उपयोग किया गया है)।

इसे पूर्ण URL को फ़ाइल में <BASE>बदलने के रूप में ही सोचें (और वह निर्देशिका नहीं है जिसमें यह रहता है), और आपको चीजें सही मिलेंगी। इस उदाहरण में प्रयोग की गई फ़ाइल को मान लेने के बाद (इसे नए स्थान पर ले जाने के बाद), सही विनिर्देश होना चाहिए था:other-subdirectory/test.html

<base href="http://www.example.com/other-subdirectory/test.html">

- एट देखा, सब कुछ काम करता है के रूप में उम्मीद: #anchor, ?query, other.html, very/other.html, /completely/other.html


27

खैर, एक मिनट रुकिए। मुझे नहीं लगता कि आधार टैग इस खराब प्रतिष्ठा के हकदार हैं।

आधार टैग के बारे में अच्छी बात यह है कि यह आपको कम परेशानी वाले जटिल URL को फिर से लिखने में सक्षम बनाता है।

यहाँ एक उदाहरण है। आप http://example.com/product/category/thisproduct को http://example.com/product/thisproduct पर ले जाने का निर्णय लेते हैं । आप पहले URL को दूसरे URL पर फिर से लिखने के लिए अपनी .htaccess फ़ाइल को बदलते हैं।

जगह में आधार टैग के साथ, आप अपना .htaccess फिर से लिखते हैं और यही है। कोई दिक्कत नहीं है। लेकिन आधार टैग के बिना, आपके सभी रिश्तेदार लिंक टूट जाएंगे।

URL पुनर्लेखन अक्सर आवश्यक होते हैं, क्योंकि उन्हें ट्विक करने से आपकी साइट की वास्तुकला और खोज इंजन दृश्यता में मदद मिल सकती है। सच है, आपको "#" और '' समस्याओं के लिए वर्कअराउंड की आवश्यकता होगी जो लोगों ने उल्लेख किया है। लेकिन बेस टैग टूलकिट में एक जगह के लायक है।


10
मेरे विचार से, समस्या भविष्य का प्रमाण है। यदि आप किसी पृष्ठ पर आधार टैग का उपयोग करते हैं, तो पृष्ठ के साथ बातचीत करने वाले सभी अन्य पुस्तकालय आधार टैग से प्रभावित होंगे, जिसमें तृतीय पक्ष पुस्तकालय शामिल हैं जो नग्न एंकर टैग या हैश के डिफ़ॉल्ट व्यवहार पर भरोसा कर सकते हैं।
Kzqai

4
@Kzqai, +1 अच्छा बिंदु, लेकिन कई वेबसाइटें हैं जो त्रुटिपूर्ण पुस्तकालयों का उपयोग नहीं करती हैं। समस्या आधार href के साथ नहीं है, यह पुस्तकालय के साथ है और इसे वहाँ ठीक करने की आवश्यकता है।
पचेरियर

2
@Pacerier, मैं कहूंगा कि समस्या वास्तव में बेस href के साथ है। या यों कहें, समस्या यह है कि ब्राउज़र पर्याप्त चतुर नहीं लगते हैं, बस एंकर href के साथ प्रभावित नहीं होते हैं जो कि # से शुरू होता है। मैंने जावास्क्रिप्ट के साथ इसे ठीक करने का प्रयास किया और इससे पुस्तकालयों को href='#'लिंक का उपयोग करने में समस्याएँ हुईं (उदाहरण के लिए, बूटस्ट्रैप)। पुस्तकालयों को दोष देना उन्हें हर चीज के लिए दोषी ठहराने जैसा है जो HTML के साथ गलत होता है। यह एक आधुनिक काम के लिए एक पुराना उपकरण है, जितना सरल है।
डेजी

2
"कम परेशानी वाले जटिल URL को फिर से लिखना।" - हालांकि, इस मामले में baseटैग यकीनन (सही ढंग से) रूट-रिलेटेड URL (या यहां तक ​​कि निरपेक्ष URL) का पहली बार उपयोग नहीं करने के लिए एक समाधान है।
श्रीवित्त्र

@Deji, जब मैंने "समस्या" लिखा, मेरा मतलब है "बग"। हाँ, बेस href का बहुत अस्तित्व वास्तव में एक वास्तविक "समस्या" है, लेकिन उपरोक्त मामले में, मैं कह रहा हूँ कि बग बेस क्रोम के साथ नहीं है। (फिर भी एक बार के लिए नहीं लगता कि मैं आधार href का उपयोग करने का समर्थन करता हूं, वास्तव में, मेरा स्टैंड यह है कि इसके वर्तमान संस्करण में आधार href व्यर्थ है : stackoverflow.com/a/46539210/632951 । अब आगे का सबसे अच्छा तरीका यह है कि इसे अपग्रेड करना या एकाधिक सक्षम करना है। आधार hrefs के रूप में यह केवल उपयोगी है जब कई का उपयोग किया जा सकता है)
Pacerier

22

यह तय करने के लिए कि इसका उपयोग किया जाना चाहिए या नहीं, आपको इसके बारे में पता होना चाहिए कि यह क्या करता है और क्या इसकी आवश्यकता है। यह पहले से ही इस जवाब में आंशिक रूप से उल्लिखित है , जिसमें मैंने भी योगदान दिया था। लेकिन समझने और अनुसरण करने में आसान बनाने के लिए, यहां एक दूसरा स्पष्टीकरण। पहले हमें समझने की जरूरत है:

ब्राउज़र द्वारा <BASE>उपयोग किए बिना लिंक कैसे संसाधित किए जाते हैं ?

कुछ उदाहरणों के लिए, मान लें कि हमारे पास ये URL हैं:

ए) http://www.example.com/index.html
बी) http://www.example.com/
सी) http://www.example.com/page.html
डी)http://www.example.com/subdir/page.html

A + B दोनों एक ही फ़ाइल में परिणाम करते हैं ( index.html) ब्राउज़र को भेजे जाते हैं, C बेशक भेजता है page.html, और D भेजता है /subdir/page.html

चलो आगे मान लेते हैं, दोनों पृष्ठों में लिंक का एक सेट है:

1) पूरी तरह से योग्य पूर्ण लिंक ( http://www...)
2) स्थानीय पूर्ण लिंक ( /some/dir/page.html)
3) फ़ाइल नाम ( dir/page.html), और
4 सहित रिश्तेदार लिंक "खंड" ( #anchor, ?foo=bar) के साथ रिश्तेदार लिंक ।

ब्राउज़र पृष्ठ को प्राप्त करता है, और HTML को प्रस्तुत करता है। यदि यह कुछ URL पाता है, तो यह जानना आवश्यक है कि इसे कहाँ इंगित करना है। लिंक 1) के लिए यह हमेशा स्पष्ट है, जो कि इस प्रकार है। सभी अन्य प्रदान किए गए पृष्ठ के URL पर निर्भर करते हैं:

URL     | Link | Result
--------+------+--------------------------
A,B,C,D |    2 | http://www.example.com/some/dir/page.html
A,B,C   |    3 | http://www.example.com/dir/page.html
D       |    3 | http://www.example.com/subdir/dir/page.html
A       |    4 | http://www.example.com/index.html#anchor
B       |    4 | http://www.example.com/#anchor
C       |    4 | http://www.example.com/page.html#anchor
D       |    4 | http://www.example.com/subdir/page.html#anchor

अब उपयोग किए जाने के साथ क्या बदलता <BASE>है?

<BASE>ब्राउज़र के रूप में URL को प्रतिस्थापित करना चाहिए । तो यह सभी लिंक को प्रस्तुत करता है जैसे कि उपयोगकर्ता ने निर्दिष्ट URL को कॉल किया था <BASE>। जो कई अन्य उत्तरों में से कुछ भ्रम की व्याख्या करता है:

  • फिर से, "पूरी तरह से योग्य पूर्ण लिंक" ("टाइप 1") के लिए कुछ भी नहीं बदलता है
  • स्थानीय निरपेक्ष लिंक के लिए, लक्षित सर्वर बदल सकता है (यदि कोई निर्दिष्ट <BASE>उपयोगकर्ता से शुरू में कहे जाने वाले से भिन्न हो)
  • रिश्तेदार URL यहां महत्वपूर्ण हो जाते हैं, इसलिए आपको विशेष ध्यान रखना है कि आप कैसे सेट करते हैं <BASE>:
    • बेहतर है कि इसे किसी डायरेक्टरी में सेट करने से बचें । ऐसा करने पर, "टाइप 3" के लिंक काम करना जारी रख सकते हैं, लेकिन यह निश्चित रूप से "टाइप 4" ("केस" को छोड़कर) को तोड़ता है)
    • इसे पूरी तरह से योग्य फ़ाइल नाम सेट करता है, ज्यादातर मामलों में, वांछित परिणाम।

एक उदाहरण यह सबसे अच्छा समझाता है

कहो कि आप कुछ URL का उपयोग करके "पहले से बताएं" करना चाहते हैं mod_rewrite:

  • असली फ़ाइल: <DOCUMENT_ROOT>/some/dir/file.php?lang=en
  • असली URL: http://www.example.com/some/dir/file.php?lang=en
  • उपयोगकर्ता के अनुकूल URL: http://www.example.com/en/file

के मान लेते हैं mod_rewriteकरने के लिए प्रयोग किया जाता है पारदर्शी रूप से वास्तविक एक के लिए उपयोगकर्ता के अनुकूल यूआरएल पुनर्लेखन (कोई बाहरी फिर से सीधा है, तो "उपयोगकर्ता के अनुकूल" एक ब्राउज़र पता बार में रहता है, जबकि वास्तविक एक भरी हुई है)। अब क्या करे?

  • कोई <BASE>निर्दिष्ट नहीं : सभी रिश्तेदार लिंक को तोड़ता है (जैसा कि वे http://www.example.com/en/fileअभी आधारित होंगे )
  • <BASE HREF='http://www.example.com/some/dir>: बिलकुल गलत। निर्दिष्ट URL का फ़ाइल भाग dirमाना जाएगा , इसलिए अभी भी, सभी रिश्तेदार लिंक टूट गए हैं।
  • <BASE HREF='http://www.example.com/some/dir/>: पहले से बेहतर। लेकिन "टाइप 4" के सापेक्ष लिंक अभी भी टूटे हुए हैं ("केस बी" को छोड़कर)।
  • <BASE HREF='http://www.example.com/some/dir/file.php>: बिल्कुल सही। सब कुछ इस एक के साथ काम करना चाहिए।

एक आखिरी नोट

ध्यान रखें कि यह आपके दस्तावेज़ के सभी URL पर लागू होता है :

  • <A HREF=
  • <IMG SRC=
  • <SCRIPT SRC=
  • ...

अपने अंतिम नोट का जिक्र करते हुए ... मैं उत्सुक हूं .. क्या यह भी एक तरह से परिवर्तन करता है जिस तरह से एक jQuery के अजाक्स अनुरोध की व्याख्या की जा रही है। यह भिन्न है<SCRIPT SRC=
bkwdesign

@ bkwdesign मैं jQuery का उपयोग नहीं करता, लेकिन मैं ऐसा मानूंगा।
इज़ी

@Izzy, Re "उदाहरण" दरअसल , यदि आप </some/dir/file.php?lang=en> को </ en / file> से पहले करते हैं, तो आप </ कुछ / dir / पृष्ठ 2 को भी पहले से देखना चाहेंगे? = en> और </ कुछ / dir / स्क्रिप्ट> से </ en / पेज 2> और </ en / स्क्रिप्ट>। इस प्रकार आपके रिश्तेदार रास्ते वैसे ही काम करेंगे, जैसे उन्हें करना चाहिए
पचेरियर

<BASE HREF='http://www.example.com/some/dir/file.php>"प्रकार 4" के साथ कैसे काम करेगा ? यह उदाहरण के बजाय " example.com/some/dir/file.php?foo=bar " की तरह नहीं होगा । उदाहरण के लिए
subdir

@ANewGuyInTown हां, और यह वही है जो यह होना चाहिए - जैसा कि मेरे उदाहरण http://www.example.com/some/dir/file.phpमें "वास्तविक स्थान" है (देखें "एक उदाहरण इसे सबसे अच्छा समझाता है"), और केवल एक टुकड़ा ( #anchor) पास करके ही हल किया जा सकता है।
इज़्ज़ी

12

Drupal ने शुरुआत में <base>टैग पर भरोसा किया , और बाद में HTTP क्रॉलर्स और कैश के साथ समस्याओं के कारण उपयोग न करने का निर्णय लिया।

मुझे आमतौर पर लिंक पोस्ट करना पसंद नहीं है। लेकिन यह वास्तव में साझा करने के लायक है क्योंकि यह <base>टैग के साथ वास्तविक दुनिया के अनुभव के विवरण की तलाश करने वालों को लाभ दे सकता है :

http://drupal.org/node/13148


एक चर्चा के लिंक बिंदु इस उत्तर से आठ साल पहले थे, इसलिए अब लगभग एक दशक पहले। मुझे लगता है कि अगर यह अभी भी एक समस्या है तो कुछ और परीक्षण किए जाने चाहिए, बजाय इसके कि किसी समस्या के इतने पुराने विवरण से जुड़ा हो जो मौजूद नहीं है।
सामी कुहोमेन

यह सच है, लेकिन IMHO यह अभी भी एक आंख खोलने वाला है कि आपको किन समस्याओं के आधार पर अपने क्रियान्वयन का परीक्षण करने की आवश्यकता है <base>, न कि यह कि आपके एंकर आपके ब्राउज़र में सही काम करते हैं।
अमृत ​​मोस्तफा

@AmrMostafa, बस बेस href का उपयोग न करें।
पचेरियर

10

यह ऑफ़लाइन देखने के लिए पृष्ठों को आसान बनाता है; आप पूरी तरह से योग्य URL को बेस टैग में रख सकते हैं और फिर आपके दूरस्थ संसाधन ठीक से लोड हो जाएंगे।


@ एरिक, ऑफ़लाइन देखने के अलावा, यह उन सभी स्टॉपगैप usecases के लिए भी काम करता है जिन्हें किसी अन्य डोमेन के किसी डोमेन के पृष्ठ को प्रदर्शित करने की आवश्यकता होती है। उदाहरण के लिए, jsfiddle पर किसी पृष्ठ को प्रदर्शित करते समय, आप अपने डोमेन को jsfiddle के डोमेन के बजाय आधार href का उपयोग कर सकते हैं। For यद्यपि वास्तविक रूप से बोलना, केवल ऐसे स्टॉपगैप usecases के लिए एक टैग बनाना एक अच्छा डिज़ाइन नहीं है, इस प्रकार बेस href को हटा दिया जाना चाहिए और हटा दिया जाना चाहिए, जबकि यह ऐसे स्टॉपगैप usecases के लिए उपयोगी हो सकता है।
पेसर

5

हैश "#" वर्तमान में बेस एलिमेंट के साथ जंप लिंक के लिए काम करता है, लेकिन केवल Google क्रोम और फ़ायरफ़ॉक्स के नवीनतम संस्करणों में, IE9 नहीं।

IE9 पृष्ठ को फिर से लोड किए जाने के कारण प्रतीत होता है, बिना कहीं भी कूदते हुए। यदि आप एक iframe के बाहर जंप लिंक का उपयोग कर रहे हैं, तो फ्रेम के भीतर एक अलग पेज पर जंप लिंक को लोड करने के लिए फ्रेम को निर्देशित करते हुए, आपको इसके बजाय फ्रेम के अंदर लोड किए गए जंप लिंक पेज की दूसरी कॉपी मिलेगी।


5

यह शायद बहुत लोकप्रिय नहीं है क्योंकि यह अच्छी तरह से ज्ञात नहीं है। मैं इसका इस्तेमाल करने से नहीं डरता क्योंकि सभी प्रमुख ब्राउज़र इसका समर्थन करते हैं।

यदि आपकी साइट AJAX का उपयोग करती है, तो आप यह सुनिश्चित करना चाहेंगे कि आपके सभी पृष्ठ इसे सही ढंग से सेट करें या आप उन लिंक्स के साथ समाप्त हो सकते हैं जिन्हें हल नहीं किया जा सकता है।

बस targetHTML 4.01 स्ट्रिक्ट पेज में विशेषता का उपयोग न करें ।


वास्तव में बेसटार्ग उपयोगी हो सकता है, लेकिन बेसहर्ट एन्ट। वास्तव में, यह लोकप्रिय नहीं है क्योंकि यह उपयोगी नहीं है । मेरे ans देखें।
पेसियर

अब सभी ब्राउज़र baseटैग का समर्थन करते हैं ।
विटाली ज़डनेविच

3

एसवीजी छवियों के पेज में इनलेट के मामले में एक और महत्वपूर्ण मुद्दा है जो baseटैग का उपयोग करने पर उत्पन्न होता है:

चूंकि baseटैग के साथ (जैसा कि पहले ही ऊपर उल्लेख किया गया है) आप प्रभावी रूप से इस तरह के रिश्तेदार हैश यूआरएल का उपयोग करने की क्षमता को ढीला करते हैं

<a href="#foo">

क्योंकि उन्हें वर्तमान दस्तावेज़ के स्थान के बजाय आधार URL के विरुद्ध हल किया जाएगा और इस प्रकार अब सापेक्ष नहीं हैं। तो आपको इस तरह के लिंक में वर्तमान दस्तावेज़ का पथ जोड़ना होगा

<a href="https://stackoverflow.com/path/to/this/page/name.html#foo">

तो baseटैग के प्रतीत होने वाले सकारात्मक पहलुओं में से एक (जो एंकर टैग से लंबे URL उपसर्गों को स्थानांतरित करना है और अच्छे, छोटे एंकर प्राप्त करना है) स्थानीय हैश URL के लिए पूरी तरह से बैकफ़ायर है।

यह विशेष रूप से कष्टप्रद है जब आपके पेज में एसवीजी को इनलाइन किया जाता है, तो यह स्थिर एसवीजी या गतिशील रूप से उत्पन्न एसवीजी हो क्योंकि एसवीजी में इस तरह के बहुत सारे संदर्भ हो सकते हैं और जैसे ही एक baseटैग का उपयोग किया जाएगा, वैसे ही वे सभी टूट जाएंगे , लेकिन सभी उपयोगकर्ता एजेंट कार्यान्वयन (क्रोम कम से कम अभी भी लेखन के समय इन परिदृश्यों में काम करता है)।

यदि आप एक टेम्प्लेटिंग सिस्टम या किसी अन्य टूल-चेन का उपयोग कर रहे हैं जो आपके पृष्ठों को प्रोसेस / जेनरेट करता है, तो मैं हमेशा baseटैग से छुटकारा पाने की कोशिश करूंगा , क्योंकि जैसा कि मैं इसे देखता हूं, यह टेबल की तुलना में अधिक समस्याओं को हल करता है।


एसवीजी के साथ या उसके बिना, बेस टैग बेकार है और हानिकारक माना जाता है । मेरा विस्तार देखें: stackoverflow.com/a/46539210/632951
पेसियर

3

इसके अलावा, आपको याद रखना चाहिए कि यदि आप अपने वेब सर्वर को गैर-मानक पोर्ट पर चलाते हैं तो आपको पोर्ट संख्या को बेस href पर भी शामिल करना होगा:

<base href="//localhost:1234" />  // from base url
<base href="../" />  // for one step above

2

मैं वास्तव में इसे उपयोग करने में कोई बिंदु नहीं देखा है। बहुत कम लाभ प्रदान करता है, और यहां तक ​​कि उपयोग करने के लिए चीजों को कठिन बना सकता है।

जब तक आपके पास एक ही उप-निर्देशिका में सैकड़ों या हजारों लिंक नहीं होंगे। तब यह आपको बैंडविड्थ की कुछ बाइट्स बचा सकता है।

बाद में, मुझे लगता है कि IE6 में टैग के साथ कुछ समस्या है। आप उन्हें शरीर में कहीं भी रख सकते हैं, साइट के विभिन्न भागों को अलग-अलग स्थानों पर पुनर्निर्देशित कर सकते हैं। यह IE7 में तय किया गया था, जिसने बहुत सारी साइटें तोड़ दीं।


3
लाभ शायद बैंडविड्थ की बचत नहीं कर रहा है, लेकिन क्लीनर और छोटे यूआरएल। दुर्भाग्य से, सभी लिंक के व्यवहार में सूक्ष्म परिवर्तन वास्तव में इसके लायक नहीं है, पर यह पता चला है।
काजकाई

1
baseटैग कुछ समस्याओं के लिए एक समाधान है। यदि आपको कोई समस्या नहीं है, तो baseटैग का उपयोग न करें । उदाहरण: 1. विभिन्न प्रणालियों में HTML सामग्री का पुन: उपयोग। लिंक को सामग्री में सापेक्ष रखा जाता है और एक उपयुक्त baseटैग सेट किया जाता है (सीएमएस द्वारा) ताकि लिंक सही ढंग से हल हो जाए। 2. एक मौजूदा साइट सापेक्ष URL का उपयोग करती है, लेकिन बाद में "सुंदर" URL को लागू करने का निर्णय लेती है जो URL-पथ की गहराई को बदल देता है। एक baseटैग को सभी संबंधित URL को "ठीक" करने के लिए बेहतर माना जा सकता है।
MrWhite

@MrWhite, सीएमएस को लिंक को सही ढंग से हल करने के लिए आधार टैग का उपयोग करने की आवश्यकता नहीं है क्योंकि HTML पहले से ही संबंधित पथ का समर्थन करता है जो वर्तमान फ़ोल्डर में चूक करता है । यहाँ विस्तार देखें: stackoverflow.com/a/46539210/632951
Pacerier

1
@ स्पेसर उस पर निर्भर करता है जहां सामग्री स्थित है (FWIW मैं वर्डप्रेस एट अल का उल्लेख नहीं कर रहा हूं)।
MrWhite

@MrWhite आमतौर पर एक सीएमएस पहली जगह में स्थिर लिंक का उपयोग नहीं करेगा, ताकि उदाहरण अजीब तरह का हो। वास्तव में, इन दिनों बहुत कम वेबसाइट स्थिर HTML का उपयोग करके बनाई गई हैं। - मैं आपके बिंदुओं को वहां देख सकता हूं, लेकिन वे उन समस्याओं का समाधान हैं जो मूल रूप से अब अप्रचलित हैं। (हर कोई और उनके दादा दादी वर्डप्रेस, या समान, सब कुछ के लिए उपयोग कर रहे हैं।)
अटली

2

एक ऐसी साइट भी है जहाँ आधार - टैग का उपयोग किया जाता है, और समस्या का वर्णन किया जाता है। (जेकरी को अपग्रेड करने के बाद), इस तरह से टैब यूरेल करके इसे ठीक करने में सक्षम था:

<li><a href="{$smarty.server.REQUEST_URI}#tab_1"></li>

यह उन्हें "स्थानीय" बनाता है

संदर्भ मैं इस्तेमाल किया:

http://bugs.jqueryui.com/ticket/7822 http://htmlhelp.com/reference/html40/head/base.html http://tjvantoll.com/2013/02/17/use-jquery-ui- टैब-साथ-आधार टैग /


2

AngularJS के साथ कार्य करते हुए BASE टैग ने चुपचाप $ कुकी को तोड़ दिया और मुझे यह पता लगाने में थोड़ा समय लगा कि मेरा ऐप अब कुकीज़ क्यों नहीं लिख सकता। चेतावनी दी...


1

एक बात का ध्यान रखें:

यदि आप iOS पर UIWebView के भीतर प्रदर्शित होने के लिए एक वेबपेज विकसित करते हैं, तो आपको BASE टैग का उपयोग करना होगा। यह अन्यथा काम नहीं करेगा। जावास्क्रिप्ट, सीएसएस, छवियों - उनमें से कोई भी UIWebView के तहत सापेक्ष लिंक के साथ काम नहीं करेगा, जब तक कि टैग आधार निर्दिष्ट नहीं किया जाता है।

मुझे इससे पहले पकड़ा गया है, जब तक मुझे पता नहीं चल गया।


1

मुझे <base>लिंक आधारित और उपयोग करने का एक तरीका मिल गया है । आप लिंक का उपयोग करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं जैसे #contactउन्हें करना है। मैंने इसे कुछ लंबन पृष्ठों में उपयोग किया और यह मेरे लिए काम करता है।

<base href="http://www.mywebsite.com/templates/"><!--[if lte IE 6]></base><![endif]-->

...content...

<script>
var link='',pathname = window.location.href;
$('a').each(function(){
    link = $(this).attr('href');
    if(link[0]=="#"){
        $(this).attr('href', pathname + link);
    }
});
</script>

आपको पृष्ठ के अंत में उपयोग करना चाहिए


0

मेरा सुझाव यूआरएल पथ के प्रबंधन में तत्व का उपयोग करने के लिए नहीं है<base> । क्यों?

यह सिर्फ एक समस्या को दूसरे के लिए ट्रेड करता है। आधार तत्व के बिना आप अपने रिश्तेदार पथों और लिंक के लिए किसी भी पथ प्रणाली का उपयोग कर सकते हैं, बिना किसी डर के वे टूट जाएंगे। जिस मिनट में आप बेस एलिमेंट को एक पथ पर सेट करते हैं, आप उस पथ पर काम करने के लिए अपने सभी url को डिजाइन करने के लिए "लॉक इन" होते हैं और अब बेस पथ से कार्य करने के लिए सभी पथों को बदलना होगा। बुरा विचार!

इसका मतलब है कि आपको अब LONGER पथ लिखना होगा और इस आधार के सापेक्ष प्रत्येक पथ को ट्रैक करना होगा। इससे भी बदतर ..... जब <base>वे तत्व का उपयोग करते हैं, तो आप पुराने ब्राउज़रों (" https://www.example.com/ ") का समर्थन करने के लिए पूरी तरह से योग्य आधार पथ का उपयोग करने की सलाह देते हैं , इसलिए अब आपने अपने डोमेन को अपने कोड में हार्ड-कोड कर दिया है पृष्ठ या आपके सभी लिंक एक मान्य डोमेन पथ पर निर्भर करते हैं।

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

इसके अलावा, ऊपर दिया गया तर्क कि आपका उपयोग बेस url वेब पृष्ठों के फ़ोल्डरों को नए सबफ़ोल्डर स्थानों पर माइग्रेट करने में आपकी मदद करता है, वास्तव में आज कोई फर्क नहीं पड़ता क्योंकि अधिकांश आधुनिक सर्वर आपको किसी भी डोमेन के तहत नए एप्लिकेशन रूट फ़ोल्डर के रूप में किसी भी सबफ़ोल्डर को जल्दी से सेट करने की अनुमति देते हैं। वेब एप्लिकेशन की परिभाषा या "रूट" को अब फोल्डर या डोमेन द्वारा बाध्य नहीं किया जाता है।

यह पूरी तरह से मूर्खतापूर्ण लगता है। इसलिए मैं कहता हूं कि बेस यूआरएल छोड़ दो और पुराने नेटिव सर्वर-क्लाइंट डिफॉल्ट पाथ सिस्टम को सपोर्ट करो जो इसका उपयोग नहीं करता है।

नोट: यदि आपके पास कुछ नई API प्रणाली के कारण पथ को नियंत्रित करने में समस्या है, तो समाधान सरल है ... संगत है कि आप अपने सभी url और अपने API में लिंक कैसे पथ करते हैं। आधार या HTML5 के ब्राउज़र समर्थन या जावास्क्रिप्ट एपीआई kiddies जैसे नए सर्कस चाल पर भरोसा मत करो। बस अपने सभी एंकर टैग लगातार पथ और आप मुद्दों कभी नहीं होगा। व्हाट्सएप, आपके वेब एप्लिकेशन को इस्तेमाल किए गए पथ सिस्टम की परवाह किए बिना नए सर्वरों के लिए तुरंत पोर्टेबल है।

फिर से पुराना है नया! आधार तत्व स्पष्ट रूप से एक समस्या का समाधान बनाने की कोशिश कर रहा है जो 20 साल पहले वेब वर्ल्ड में कभी मौजूद नहीं था, आज बहुत कम है।


-1

बेस href उदाहरण

लिंक के साथ एक विशिष्ट पृष्ठ कहें:

<a href=home>home</a> <a href=faq>faq</a> <a href=etc>etc</a>

एक विस्तृत फ़ोल्डर के लिए .and लिंक:

..<a href=../p2/home>Portal2home</a> <a href=../p2/faq>p2faq</a> <a href=../p2/etc>p2etc</a>..

बेस href के साथ , हम बेस फोल्डर को दोहराने से बच सकते हैं :

<base href=../p2/>
<a href=home>Portal2-Home</a> <a href=faq>P2FAQ</a> <a href=contact>P2Contact</a>

इसलिए यह जीत है .. फिर भी पृष्ठों में अक्सर आधारों को अलग करने के लिए यूआरएल होते हैं और वर्तमान वेब प्रति पृष्ठ केवल एक आधार href का समर्थन करता है , इसलिए जीत जल्दी ही आधारों के रूप में खो जाती है जो कि आधार आधार ed hrefed दोहराता है, उदा:

<a href=../p1/home>home</a> <a href=../p1/faq>faq</a> <a href=../p1/etc>etc</a>
<!--.. <../p1/> basepath is repeated -->

<base href=../p2>
<a href=home>Portal2-Home</a> <a href=faq>P2FAQ</a> <a href=contact>P2Contact</a>


निष्कर्ष

( बेस लक्ष्य उपयोगी हो सकता है।) बेस href बेकार है:

  • पेज भी उतना ही WET है है:
    • डिफ़ॉल्ट आधार [-संतुलित फ़ोल्डर] (एकदम सही (जब तक कि अनावश्यक / दुर्लभ अपवाद ent1 और 𝒞2 न हो )।
    • वर्तमान वेब web मल्टीपल बेस हेरेफ्स असमर्थित

सम्बंधित


यह निश्चित है कि @downvoters यह समझाने में सक्षम नहीं होंगे कि आधार कैसे उपयोगी है, खासकर तब जब पूरे उद्योग बड़े पैमाने पर इसका उपयोग करने की सलाह देते हैं।
पेसियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.