मैं एक Drupal 8 वेबसाइट चला रहा हूं, और जब मैं किसी पृष्ठ पर ब्राउज़ करता हूं, तो मुझे उस पर केवल निम्न त्रुटि संदेश के साथ एक सादे सफेद पृष्ठ मिलता है।
प्रदान किया गया होस्ट नाम इस सर्वर के लिए मान्य नहीं है।
इसका क्या मतलब है? मैं यह कैसे तय करुं?
मैं एक Drupal 8 वेबसाइट चला रहा हूं, और जब मैं किसी पृष्ठ पर ब्राउज़ करता हूं, तो मुझे उस पर केवल निम्न त्रुटि संदेश के साथ एक सादे सफेद पृष्ठ मिलता है।
प्रदान किया गया होस्ट नाम इस सर्वर के लिए मान्य नहीं है।
इसका क्या मतलब है? मैं यह कैसे तय करुं?
जवाबों:
यह त्रुटि संदेश उस सुविधा से आ रहा है जिसे HTTP होस्ट हेडर के हमलों से बचाने के लिए Drupal 8 में जोड़ा गया था । फ़ीचर को उस परिवर्तन रिकॉर्ड में भी वर्णित किया गया है जो पैच के लिए उत्पन्न किया गया था।
अनिवार्य रूप से, नापाक उद्देश्यों के लिए HTTP होस्ट हेडर को बिगाड़ना और ड्रुपल को कई सबसिस्टम (विशेष रूप से लिंक पीढ़ी) में एक अलग डोमेन नाम का उपयोग करने के लिए धोखा देना संभव था । दूसरे शब्दों में, HTTP होस्ट हेडर को उपयोगकर्ता इनपुट माना जाना चाहिए, और विश्वसनीय नहीं।
इससे निपटने के $settings['trusted_host_patterns']लिए, "विश्वसनीय" होस्टनाम की एक सूची को कॉन्फ़िगर करने के लिए Drupal 8 में एक नई सेटिंग, जोड़ी गई थी जो साइट से चल सकती है। सेटिंग को नियमित अभिव्यक्ति पैटर्न की एक सरणी होने की आवश्यकता है, बिना सीमांकक के, उन होस्टनामों का प्रतिनिधित्व करने से जिन्हें आप चलाने की अनुमति देना चाहते हैं।
उदाहरण के लिए, यदि आप किसी एकल होस्टनाम "www.example.com" से अपनी साइट चला रहे हैं, तो आपको इसे अपनी सेटिंग्स में जोड़ना चाहिए (आमतौर पर पाया जाता है ./sites/default/settings.php):
$settings['trusted_host_patterns'] = array(
'^www\.example\.com$',
);
नोट ^, \., और $। ये PCRE सिंटेक्स हैं । इनका मतलब यह है कि आप "www.example.com" से सटीक रूप से मेल खाना चाहते हैं, शुरुआत और अंत में कुछ भी अतिरिक्त नहीं है, और यह कि डॉट्स को डॉट्स के रूप में माना जाना चाहिए, न कि वाइल्डकार्ड वर्णों के साथ।
यदि आप "example.com" से भाग रहे हैं, तो बस उपयोग करें:
$settings['trusted_host_patterns'] = array(
'^example\.com$',
);
यदि आपको कई डोमेन और / या उप-डोमेन की साइट चलाने की आवश्यकता है, और विहित URL पुनर्निर्देशन नहीं कर रहे हैं, तो आपकी सेटिंग कुछ इस तरह दिखाई देगी:
$settings['trusted_host_patterns'] = array(
'^example\.com$',
'^.+\.example\.com$',
'^example\.org',
'^.+\.example\.org',
);
यह साइट को example.com और example.org के सभी वेरिएंट को बंद करने की अनुमति देता है, जिसमें सभी उप-डोमेन शामिल हैं।
एक बार जब आप $settings['trusted_host_patterns']उचित मूल्य पर समायोजित हो जाते हैं, तो आपको अपनी साइट पर फिर से ब्राउज़ करने में सक्षम होना चाहिए।
आप अपनी विश्वसनीय होस्ट सेटिंग की स्थिति रिपोर्ट पृष्ठ से भी देख सकते हैं, जो कि व्यवस्थापक / रिपोर्ट / स्थिति पर है
यदि आप सेटिंग को पूरी तरह से हटा देते हैं, तो विश्वसनीय होस्ट तंत्र का उपयोग नहीं किया जाएगा, और आपको स्थिति रिपोर्ट पृष्ठ पर एक त्रुटि दिखाई देगी। इसके अतिरिक्त, आपकी साइट HTTP होस्ट हेडर हमलों के लिए भी असुरक्षित हो सकती है।
यदि आपके पास यह सेटिंग कॉन्फ़िगर है और इस संदेश को देख रहे हैं, तो इसका मतलब है कि आपने नियमित अभिव्यक्ति सिंटैक्स को गड़बड़ कर दिया है। इस स्थिति में, पहला उदाहरण लें, और अपनी सेटिंग्स में कॉपी / पेस्ट करें, और फिर इसे होस्टनाम को प्रतिबिंबित करने के लिए संपादित करें जिससे आपकी साइट चलती है।
लोकलहोस्ट इंस्टॉलेशन के लिए आप अपनी सेटिंग में निम्न कोड का उपयोग कर सकते हैं। फाइल
$settings['trusted_host_patterns'] = array(
'^localhost$','^YOUR_IP_ADDRESS$'
);
ऐसा इसलिए होता है क्योंकि trusted_host_patternsआपकी सेटिंग फ़ाइल में परिवर्तनशील है। यदि आप स्थानीय वातावरण पर काम कर रहे हैं और आप इसे ओवरराइड करना चाहते हैं, तो अपनी settings.local.phpफ़ाइल में निम्न अनुभाग को परिभाषित करें :
/*
* Drupal Trusted Host Patterns
*/
$settings['trusted_host_patterns'] = [];
या अधिक सामान्य पैटर्न :
$settings['trusted_host_patterns'] = [ '.*' ];
या स्थानीय वातावरण के लिए अधिक विशिष्ट :
$settings['trusted_host_patterns'] = array(
'^172\.20.\0.\3$',
'^localhost$',
);
यह सबसे सरल समाधान है, लेकिन अनुशंसित नहीं है क्योंकि आपको नापाक उद्देश्यों के लिए HTTP होस्ट हेडर को स्पूफ करने से बचने के लिए उचित मान सेट करना चाहिए। यदि आपकी वेबसाइट केवल आपके स्थानीय पर चल रही है, तो आपको ठीक होना चाहिए।
आपके पास होने पर यह समस्या भी होगी
<VirtualHost *:443>
जब आपके पास होना चाहिए
<VirtualHost *:80>
एक गैर-एसएसएल सेटअप (जैसे देव / परीक्षण वातावरण के लिए) में स्थापित किया गया और पोर्ट 80 पर साइट तक पहुंचने का प्रयास करें
यह सेवा के विश्वसनीय होस्ट कॉन्फ़िगरेशन के कारण है। जब आप डोमेन नाम बदलते हैं या यह उत्पादन कर सकते हैं 'trusted_host_patterns'। Probleme को हल करने के लिए अपने नए डोमेन जोड़ने DRUPAL_ROOT/sites/SITE_FOLDER/settings.php(उदाहरण: sites/defaults/settings.php)
उदाहरण: डोमेन नाम = newdomain.com
$settings['trusted_host_patterns'] = array(
'^newdomain.com\.loc$',
'^www\.newdomain.com\.loc$',
);