आपको लगभग हमेशा उपयोग करना चाहिए $host, क्योंकि उपयोगकर्ता-एजेंट कैसे व्यवहार करते हैं, इसकी परवाह किए बिना कुछ समझदार होने की गारंटी केवल एक ही है, जब तक कि आपको विशेष रूप से किसी अन्य चर के शब्दार्थ की आवश्यकता न हो।
अंतर को नेगनेक्स प्रलेखन में समझाया गया है :
$host इसमें "पूर्ववर्ती के इस क्रम में: अनुरोध पंक्ति से होस्ट नाम या 'होस्ट' अनुरोध हेडर फ़ील्ड से होस्ट नाम या अनुरोध से मेल खाने वाला सर्वर नाम"
$http_host यदि यह अनुरोध में मौजूद था, तो HTTP "होस्ट" हेडर फ़ील्ड की सामग्री शामिल है
$server_nameइसमें server_nameवर्चुअल होस्ट शामिल है, जो अनुरोध को संसाधित करता है, क्योंकि यह nginx कॉन्फ़िगरेशन में परिभाषित किया गया था। यदि एक से serverअधिक server_names हैं, तो केवल पहला ही इस चर में मौजूद होगा।
चूँकि यह होस्ट-हेडर के बजाए अनुरोध-पंक्ति में होस्टनाम भेजने के लिए उपयोगकर्ता-एजेंटों के लिए कानूनी है, हालांकि यह शायद ही कभी किया जाता है जब परदे के पीछे जुड़ने के अलावा, आपको इसके लिए जिम्मेदार होना चाहिए।
आपको उस मामले के लिए भी ध्यान देना होगा जहां उपयोगकर्ता-एजेंट बिल्कुल होस्टनाम नहीं भेजते हैं, उदाहरण के लिए प्राचीन एचटीटीपी / 1.0 अनुरोध और आधुनिक बुरी तरह से लिखे गए सॉफ़्टवेयर। आप ऐसा कर सकते हैं कि उन्हें पकड़ कर सभी वर्चुअल होस्ट को डायवर्ट करें, जो कुछ भी नहीं देता है, यदि आप कई वेब साइटों की सेवा कर रहे हैं, या यदि आपके पास केवल आपके सर्वर पर एक ही वेब साइट है, तो आप एक ही वर्चुअल होस्ट के माध्यम से सब कुछ संसाधित कर सकते हैं। । उत्तरार्द्ध मामले में आपको इसके लिए भी जिम्मेदार होना चाहिए।
केवल उन $hostसभी संभावित चीजों के लिए चर खाते हैं जो एक HTTP अनुरोध बनाते समय एक उपयोगकर्ता-एजेंट कर सकते हैं।
$schemeऔर$host...return 301 /forum/index.php?posts/$arg_p/;ठीक काम करता है।