2013-07-09 7 views
31

में पुनर्प्राप्त करें। मैं एक .htaccess फ़ाइल में एक पर्यावरण चर सेट करने और इसे PHP में पुनर्प्राप्त करने का प्रयास कर रहा हूं। मैंने SO पर अन्य धागे का एक गुच्छा देखा है लेकिन अब तक जो कुछ भी मैंने कोशिश की है वह असफल हो गई है।.htaccess में एक पर्यावरण चर सेट करें और इसे PHP

SetEnv SPECIAL_PATH /foo/bin 

मैं getenv() पीएचपी समारोह का उपयोग कर यह मान पुन: प्राप्त करने की कोशिश की है:

मैं .htaccess फाइल करने के लिए इस लाइन को जोड़ दिया है

<?php $specialPath = getenv('SPECIAL_PATH'); ?> 

मैं phpinfo runned है() उपलब्ध पर्यावरण चर की सूची देखने के लिए, SPECIAL_PATH वहां नहीं है। मैं परेशान हूं कि यह क्यों काम नहीं कर रहा है।

धन्यवाद!

+1

में कुछ गहराई में कवर क्या आप वाकई htaccess फ़ाइलों को विशिष्ट निर्देशिका के लिए सक्षम हैं कर रहे हैं? एक और निर्देश आज़माएं जिसका प्रभाव आसानी से सत्यापित किया जा सके। – goat

+1

क्या यह अन्य SO प्रश्न आपकी मदद करेगा? http://stackoverflow.com/questions/3780866/why-is-my-env-empty – luchosrock

उत्तर

23

आपके कॉन्फ़िगरेशन को मानते हुए .htaccess के साथ अनुमति दें, आपको काम करने के लिए अपाचे में mod_env को सक्षम करना होगा।

Apache - mod_env

+0

मुझे लगता है कि यह समस्या है। मैं यह पता लगाने की कोशिश कर रहा हूं कि अपाचे मॉड्यूल को कैसे सक्षम किया जाए (मैं सर्वर से संबंधित किसी भी चीज़ के साथ कुल नौसिखिया हूं), लेकिन कम से कम अब मुझे पता है कि कहां देखना है। बहुत बहुत धन्यवाद। –

+2

जहां भी आपका httpd.conf स्थित है, जो डिफ़ॉल्ट रूप से "conf/httpd.conf" है - लाइन '#LoadModule env_module मॉड्यूल/mod_env.so'' के लिए देखो और # को हटा दें, फिर अपाचे को पुनरारंभ करें। –

6

अपाचे डॉक्स कस्टम error.html पृष्ठों

कहते हैं "REDIRECT_ वातावरण चर वातावरण चर जो रीडायरेक्ट करने से पहले ही अस्तित्व में से बनाई गई हैं निपटने त्रुटि के लिए पारित कर दिया वातावरण चर को शामिल किया गया। वे साथ नाम दिया जाता है एक RedIRECT_ उपसर्ग, यानी, HTTP_USER_AGENTREDIRECT_HTTP_USER_AGENT बन जाता है। "

कहते हैं, "इनमें से कोई भी सेट नहीं किया जाएगा यदि त्रुटि दस्तावेज़ लक्ष्य बाहरी रीडायरेक्ट (http: जैसे योजना नाम से शुरू हो रहा है, भले ही यह सर्वर के समान होस्ट को संदर्भित करता हो)।"

SetEnv के बारे में कहते हैं: "इस निर्देश द्वारा सेट किए गए आंतरिक पर्यावरण चर सेट प्रारंभिक अनुरोध प्रसंस्करण निर्देशों के बाद सेट किए जाते हैं, जैसे एक्सेस कंट्रोल और यूआरआई-टू-फाइलनाम मैपिंग। यदि पर्यावरण परिवर्तक आप सेटिंग कर रहे हैं रीवाइट्रूल निर्देश जैसे प्रसंस्करण के प्रारंभिक चरण में इनपुट के रूप में, आपको इसके बजाय पर्यावरण चर को SetEnvIf के साथ सेट करना चाहिए। " SetEnv HTTP_MY_VARIABLE "my value"

सेट और सर्वर वातावरण चर का उपयोग कर के कुछ .htaccess तरीके हैं, मेरी खराब होने को संशोधित करने से लिया:

कुछ सर्वर पर, उपयोगकर्ता के घोषित वातावरण चर सुरक्षा उद्देश्यों, उदाहरण के लिए 'HTTP_' से होना चाहिए

SetEnv myServerName %{SERVER_NAME} 

RewriteCond %{QUERY_STRING} (base64_encode|localhost|mosconfig|open_basedir) [NC,OR] 
RewriteCond %{QUERY_STRING} (boot\.ini|echo.*kae|etc/passwd) [NC,OR] 
RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC] 
RewriteRule .* - [E=badQueryString:%0--%1--%2,F,L] 

SetEnvIfNoCase User-Agent ^$ noUserAgent 
SetEnvIfNoCase User-Agent (binlar|casper|cmsworldmap|comodo|diavol|dotbot|feedfinder|flicky|ia_archiver|jakarta|kmccrew|nutch|planetwork|purebot|pycurl|skygrid|sucker|turnit|vikspider|zmeu) badUserAgent=$1 

<limit GET POST PUT> 
    Order Allow,Deny 
    Allow from all 
    Deny from env=badUserAgent 
</limit> 

सूचना पैरामीटर का उपयोग करते हैं, उदाहरण के लिए: प्रेस 5G ब्लैकलिस्ट/फ़ायरवॉल http://perishablepress.com/5g-blacklist-2013/ वातावरण चर रिपोर्टिंग का उपयोग करने के लिए $ 0 -% 1 -% 2। % 0 पूर्ण स्ट्रिंग देता है,% 1 पहले कोष्ठकित कथन से मिलान देता है,% 2 2। हाइफ़न अक्षरमान डिस्प्ले वर्ण हैं, जो पैरामीटर परिणामों को दृष्टि से अलग करते हैं (ऐसा नहीं लगता कि वहां रिक्त स्थान डालने का कोई तरीका है)।


यहाँ (403.php और 404.php से मेरे मामले में) वातावरण चर तक पहुँचने के कुछ पीएचपी तरीके हैं। ध्यान दें कि आप phpinfo() में देखने के लिए नहीं है, लेकिन $ सर्वर में, और कहा कि अपने चर एक 403/404 रीडायरेक्ट साथ भी ध्यान रखें कि अनुप्रेषित लगी होती हो, QUERY_STRING REDIRECT_QUERY_STRING यह सामान है कि आसानी से कर सकता है हो जाता है सर्वर निर्भर हो, इसलिए अपने वास्तविक मूल्यों के लिए $ _SERVER की जांच करें।उदाहरण के लिए,

if (getenv("HTTP_REFERER") !== FALSE) { 
    $httpref = getenv("HTTP_REFERER"); 
} else { 
    $httpref = ''; 
} 
if (isset($_SERVER['REDIRECT_STATUS'])) { 
    $status = $_SERVER['REDIRECT_STATUS']; 
} else { 
    $status = ''; 
} 
if (isset($_SERVER['REMOTE_HOST'])) { 
    $remoteHost = $_SERVER['REMOTE_HOST']; 
} else { 
    $remoteHost = ''; 
} 

if (isset($_SERVER['REDIRECT_QUERY_STRING'])) { 
    $querystring = $_SERVER['REDIRECT_QUERY_STRING']; 
} else { 
    $querystring = ''; 
} 

if (isset($_SERVER['REDIRECT_noUserAgent'])) { 
    $htaccessErrors[] = 'NoUserAgent'; 
} 
if (getenv("REDIRECT_badQueryString") !== FALSE) { 
/* must exactly match what shows up in $_SERVER, is case sensitive (e.g. badQueryString not BadQueryString) */ 
    $htaccessErrors[] = 'badQueryString:'.getenv("REDIRECT_badQueryString"); 
} 

मैं http://lcblog.lernerconsult.com/2013-server-alert-you-file-not-found-errors/

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