Htaccess में AuthUserFile के साथ RELATIVE पथ का उपयोग कैसे करें?


98

मेरे पास एक .htaccess है जो मूल प्रमाणीकरण का उपयोग करता है। ऐसा लगता है कि .htpasswd फ़ाइल का पथ htaccess फ़ाइल के सापेक्ष नहीं है, बल्कि सर्वर कॉन्फिगर के बजाय है।

भले ही मेरे पास एक ही निर्देशिका में .htaccess और .htpasswd फाइलें हों, यह काम नहीं करता है:

AuthType Basic
AuthName "Private Login"
AuthUserFile .htpasswd
Require valid-user

हालाँकि, यह काम करता है अगर मैं AuthUserFile को पूर्ण पथ का उपयोग करने के लिए बदलता हूं:

AuthType Basic
AuthName "Private Login"
AuthUserFile "/home/user/public_html/mydir/.htpasswd"
Require valid-user

लेकिन मैं कुछ और मोबाइल पसंद करूंगा क्योंकि मैं विभिन्न क्षेत्रों में कई साइटों पर इसका उपयोग करता हूं। मैंने वेब खोजा है, लेकिन कोई संकल्प नहीं किया है। क्या रिश्तेदार पथ या चर का उपयोग करना संभव है %{DOCUMENT_ROOT}?

जवाबों:


51

AuthUserFile के लिए सापेक्ष पथ का उपयोग करना संभव नहीं है :

फ़ाइल-पथ उपयोगकर्ता फ़ाइल का पथ है। यदि यह निरपेक्ष नहीं है (यानी, यदि यह स्लैश से शुरू नहीं होता है), तो इसे सापेक्ष माना जाता है ServerRoot

आपको उस सीमा के आसपास स्वीकार करना होगा और काम करना होगा।


हम IfDefineApache2 कमांड लाइन पैरामीटर के साथ मिलकर उपयोग कर रहे हैं :

.htaccess (विकास और लाइव सिस्टम दोनों के लिए उपयुक्त):

<IfDefine !development>
  AuthType Basic
  AuthName "Say the secret word"
  AuthUserFile /var/www/hostname/.htpasswd
  Require valid-user
</IfDefine>

विकास सर्वर कॉन्फ़िगरेशन (डेबियन)

निम्नलिखित को निम्नलिखित में जोड़ें /etc/apache2/envvars:

export APACHE_ARGUMENTS=-Ddevelopment

अपनी अपाचे को बाद में फिर से शुरू करें और आपको तभी पासवर्ड प्रॉम्प्ट मिलेगा जब आप डेवलपमेंट सर्वर पर नहीं होंगे।

आप निश्चित रूप से विकास सर्वर के लिए एक और IfDefine जोड़ सकते हैं, बस ब्लॉक की प्रतिलिपि बनाएँ और निकालें !


4
लेकिन यह अभी भी एक निरपेक्ष पथ ( /var/...) का उपयोग करता है - और सवाल पूछता है: "एक रिश्तेदार पथ का उपयोग कैसे करें"?
सादाऊ

1
और फिर प्रश्न "
एड

15

सिर्फ इस मामले में लोग इसके समाधान की तलाश में हैं:

<If "req('Host') = 'www.example.com'">
    Authtype Basic
    AuthName "user and password"
    AuthUserFile /var/www/www.example.com/.htpasswd
    Require valid-user
</If>

1
यह बहुत अच्छा होगा, लेकिन क्या इस पर भरोसा करना सुरक्षित है req('Host'), क्या ग्राहक इस मूल्य को छल नहीं सकता है?
मार्को डेमायो

1
@MarcoDemaio हाँ, इसका उपयोग, उदाहरण के लिए, IP पते से किया जा सकता है। यह आपके कॉन्फ़िगरेशन पर निर्भर करता है। यह एक पूर्ण हाँ या नहीं है। निर्भर करता है।
मैक्सिमे

12

1) ध्यान दें कि .htpasswdसर्वर रूट के नीचे फाइल रखना असुरक्षित माना जाता है ।

2) डॉक्स इसे रिश्तेदार रास्तों के बारे में कहते हैं, इसलिए ऐसा लगता है कि आप भाग्य से बाहर हैं:

फ़ाइल-पथ उपयोगकर्ता फ़ाइल का पथ है। यदि यह निरपेक्ष नहीं है (यानी, यदि यह स्लैश से शुरू नहीं होता है), तो इसे सर्वररूट के सापेक्ष माना जाता है ।

3) जबकि पर्यावरण चर के उपयोग की सिफारिश करने वाले उत्तर पूरी तरह से ठीक काम करते हैं, मैं .htaccessफ़ाइल में एक प्लेसहोल्डर रखना पसंद करूंगा , या मेरे कोडबेस में अलग-अलग संस्करण होंगे, और तैनाती की प्रक्रिया को सभी को सेट करना होगा (यानी प्लेसहोल्डर या रेनियर को बदलें) उपयुक्त फ़ाइल को स्थानांतरित करें)।

जावा प्रोजेक्ट्स पर, मैं इस तरह के काम करने के लिए मावेन का उपयोग करता हूं, कहते हैं, PHP प्रोजेक्ट्स, मुझे बिल्ड.sh और / या इंस्टॉल करना पसंद है। शेल स्क्रिप्ट जो उनके वातावरण में तैनात फाइलों को ट्यून करता है। यह आपके कोडबेस को उसके लक्षित वातावरण (यानी इसके पर्यावरण चर और विन्यास मापदंडों) की बारीकियों से डिकोड करता है। सामान्य तौर पर, एप्लिकेशन को पर्यावरण के अनुकूल होना चाहिए, यदि आप इसे दूसरे तरीके से करते हैं, तो आप समस्याओं में भाग सकते हैं एक बार पर्यावरण को भी विभिन्न अनुप्रयोगों के लिए, या पूरी तरह से असंबंधित, सिस्टम-विशिष्ट आवश्यकताओं के लिए पूरा करना होगा।


8

आप एक पर्यावरण में अपनी प्रामाणिक सेटिंग्स डाल सकते हैं। पसंद:

SetEnvIf HTTP_HOST testsite.local APPLICATION_ENV=development
<IfDefine !APPLICATION_ENV>
  Allow from all
  AuthType Basic
  AuthName "My Testseite - Login" 
  AuthUserFile /Users/tho/htdocs/wgh_staging/.htpasswd
  Require user username
</IfDefine>

प्रामाणिक काम कर रहा है, लेकिन मैं अपने वातावरण को वास्तव में नहीं चला सकता।


1
मुझे लगता है कि समस्या यह है: "केवल वे पर्यावरण चर जो पहले SetEnvIf [NoCase] ​​निर्देशों द्वारा परिभाषित किए गए हैं, वे इस तरीके से परीक्षण के लिए उपलब्ध हैं। 'पहले' का अर्थ है कि वे व्यापक दायरे में परिभाषित किए गए थे (जैसे कि सर्वर-वाइड या पूर्व में। वर्तमान निर्देश का दायरा। " (यहां पाया गया: askapache.com/htaccess/setenvif.html ) आपके पास एक ही स्कोप होने के कारण, आपको कोई वातावरण नहीं मिल रहा है।
user470370

4
यह काम क्यों नहीं कर रहा है यहाँ असाधारण रूप से समझाया गया है stackoverflow.com/questions/11073752/…
nico gawenda

लेकिन यह अभी भी एक निरपेक्ष पथ ( /Users/...) का उपयोग करता है - और सवाल पूछता है: "एक रिश्तेदार पथ का उपयोग कैसे करें"?
सादाऊ

हाँ। लेकिन आप प्रति वातावरण में कई पूर्ण पथों का उपयोग करने के लिए कई APPLICATION_ENV सेटिंग्स का उपयोग कर सकते हैं।
digitaldonkey

5

.htpasswd को सर्वर के पूर्ण रूट से पूर्ण निरपेक्ष पथ की आवश्यकता होती है।

कृपया गूंज द्वारा फ़ाइल का पूर्ण निरपेक्ष पथ प्राप्त करें echo $_SERVER['DOCUMENT_ROOT'];

यहाँ मूल स्थिति .htaccess स्क्रिप्ट काम कर रही है।

AuthType Basic
AuthName "Access to the Hidden Files"
AuthUserFile 'C:/xampp/htdocs/ht/.htpasswd'
Require valid-user

लॉगिन करने से पहले

यहां छवि विवरण दर्ज करें

Afetr लॉगिन करें

यहां छवि विवरण दर्ज करें


3

यदि आप Windows के साथ XAMPP का उपयोग करने का प्रयास कर रहे हैं और एक लाइव सर्वर पर एक .htaccess फ़ाइल का उपयोग करना चाहते हैं और एक XAMPP विकास मशीन पर विकसित करना चाहते हैं, तो निम्न कार्य बहुत अच्छा होता है!


1) XAMPP की एक ताजा स्थापना के बाद सुनिश्चित करें कि Apache एक सेवा के रूप में स्थापित है।

  • यह XAMPP कंट्रोल पैनल को खोलने और अपाचे मॉड्यूल के बाईं ओर थोड़ा लाल "X" पर क्लिक करके किया जाता है।
  • यह तब आपसे पूछेगा कि क्या आप अपाचे को सेवा के रूप में स्थापित करना चाहते हैं।
  • फिर इसे हरे रंग के चेक मार्क की ओर मुड़ना चाहिए।

2) जब अपाचे को एक सेवा के रूप में स्थापित किया जाता है तो एक ध्वज के रूप में एक नया पर्यावरण चर जोड़ें।

  • सबसे पहले XAMPP कंट्रोल पैनल से Apache सर्विस को बंद करें।
  • अगला एक कमांड प्रॉम्प्ट खोलें। (आप जानते हैं कि छोटी काली खिड़की DOS का अनुकरण करती है)
  • टाइप करें "C: \ Program Files (x86) \ xampp \ apache \ bin \ httpd.exe" -D "DEV" -k कॉन्फिग
  • यह पर्यावरण वेरिएबल्स के लिए एक नया डीईवी ध्वज संलग्न करेगा जिसे आप बाद में उपयोग कर सकते हैं।

3) अपाचे शुरू करें

  • XAMPP कंट्रोल पैनल का बैकअप लें और Apache सर्विस शुरू करें।

4) निम्नलिखित जानकारी के साथ अपनी .htaccess फ़ाइल बनाएँ ...

<IfDefine DEV>
  AuthType Basic
  AuthName "Authorized access only!"
  AuthUserFile "/sandbox/web/scripts/.htpasswd"
  require valid-user
</IfDefine>

<IfDefine !DEV>
  AuthType Basic
  AuthName "Authorized access only!"
  AuthUserFile "/home/arvo/public_html/scripts/.htpasswd"
  require valid-user
</IfDefine>

उपरोक्त लिपि की व्याख्या करने के लिए यहां कुछ नोट्स दिए गए हैं ...

  • मेरा AuthUserFile मेरे सेटअप और व्यक्तिगत प्राथमिकताओं पर आधारित है।
  • मेरे पास एक स्थानीय परीक्षण देव बॉक्स है जिसमें मेरा वेबपेज c: \ sandbox \ web \ पर स्थित है । उस फ़ोल्डर के अंदर मेरे पास एक फ़ोल्डर होता है जिसे स्क्रिप्ट कहा जाता है जिसमें पासवर्ड फ़ाइल .htpasswd होती है
  • पहली प्रविष्टि IfDefine DEV का उपयोग उस उदाहरण के लिए किया जाता है। यदि DEV सेट है (जो हमने ऊपर किया है, केवल मोटे मशीन पर) तो वह उस प्रविष्टि का उपयोग करेगा।
  • और बदले में अगर लाइव सर्वर IfDefine! DEV का उपयोग किया जाएगा।

5) निम्नलिखित जानकारी के साथ अपना पासवर्ड फ़ाइल (.htpasswd नाम के इस मामले में) बनाएँ ...

उपयोगकर्ता: $ apr1 $ EPuSBcwO $ / KtqDUttQMNUa5lGXSOzk।

ध्यान देने योग्य कुछ बातें ...

  • आपकी पासवर्ड फ़ाइल कोई भी नाम हो सकता है जिसे आप चाहते हैं।
  • आपको सुरक्षा के लिए .htpasswd का उपयोग करना चाहिए।
  • एक महान पासवर्ड जनरेटर @ http://www.htaccesstools.com/htpasswd-generator/ मिला
  • एक महान स्पष्टीकरण और कारण कि आपको अपनी फ़ाइल के लिए उस नाम का उपयोग क्यों करना चाहिए @ http://www.htaccesstools.com/articles/htpasswd/
  • सुनिश्चित करें कि आप सही स्थिति में पास से बाहर हैं !!! (देखें चरण 4 प्रामाणिक क्षेत्र)

लेकिन यह अभी भी एक निरपेक्ष पथ ( /home...) का उपयोग करता है - और सवाल पूछता है: "एक रिश्तेदार पथ का उपयोग कैसे करें"?
सादाऊ

2

या यदि आप लोकलहोस्ट पर विकसित होते हैं (केवल अपाचे 2.4+ के लिए):

<If "%{REMOTE_ADDR} != '127.0.0.1'">
</If>

1

मुझे पता है कि यह एक पुराना प्रश्न है, लेकिन मैंने बस एक ही चीज़ की खोज की है और शायद कई अन्य लोग त्वरित, मोबाइल समाधान खोज रहे हैं। यहाँ मैं आखिरकार क्या लेकर आया हूँ:

# We set production environment by default
SetEnv PROD_ENV 1

<IfDefine DEV_ENV>
  # If 'DEV_ENV' has been defined, then unset the PROD_ENV
  UnsetEnv PROD_ENV

  AuthType Basic
  AuthName "Protected Area"
  AuthUserFile /var/www/foo.local/.htpasswd
  Require valid-user
</IfDefine>

<IfDefine PROD_ENV>
  AuthType Basic
  AuthName "Protected Area"
  AuthUserFile /home/foo/public_html/.htpasswd
  Require valid-user
</IfDefine>

लेकिन यह अभी भी एक निरपेक्ष पथ ( /var...) का उपयोग करता है - और सवाल पूछता है: "एक रिश्तेदार पथ का उपयोग कैसे करें"?
सादाऊ

1
हां, यह एक काम के आसपास है, क्योंकि एपाचे .htaccessफ़ाइल के स्थान के सापेक्ष पथ का समर्थन नहीं करता है । यदि आप एक रिश्तेदार पथ का उपयोग करने के लिए थे, यह के सापेक्ष माना जाएगा ServerRoot
ओवी

1

एक उदाहरण लेते हैं।

आपका एप्लिकेशन कुछ लिनक्स सर्वर पर / var / www / myApp में स्थित है

.htaccess : /var/www/myApp/.htaccess

htpasswdApp : / var / www / myApp / htpasswdApp । (आप .htpasswd फ़ाइल के लिए किसी भी नाम का उपयोग करने के लिए स्वतंत्र हैं )

रिश्तेदार पथ का उपयोग करने के लिए .htaccess :

AuthType Digest
AuthName myApp
AuthUserFile "htpasswdApp"
Require valid-user

लेकिन यह server_root डायरेक्टरी में फाइल खोजेगा । नहीं में DOCUMENT_ROOT

आउट केस में, जब एप्लिकेशन / var / www / myApp पर स्थित हो :

DOCUMENT_ROOT है / var / www / MyApp

server_root है / etc / apache2 // (सिर्फ हमारे उदाहरण में, क्योंकि हम linux सर्वर का उपयोग करते हैं )

आप इसे अपने अपाचे कॉन्फ़िगरेशन फ़ाइल ( /etc/apache2/apache2.conf ) में फिर से परिभाषित कर सकते हैं , लेकिन मुझे लगता है कि यह एक बुरा विचार है।

तो अपने /var/www/myApp/.htaccess में रिश्तेदार फ़ाइल पथ का उपयोग करने के लिए आपको अपने सर्वर-रॉट में पासवर्ड की फ़ाइल को परिभाषित करना चाहिए ।

मैं इसे फॉलो कमांड द्वारा करना पसंद करता हूं:

sudo ln -s /var/www/myApp/htpasswdApp /etc/apache2/htpasswdApp

आप मेरी आज्ञा की नकल करने के लिए स्वतंत्र हैं, प्रतीक के बजाय एक कड़ी का उपयोग करें, या अपने server_root में एक फ़ाइल की प्रतिलिपि बनाएँ


1
चूंकि अपाचे डिफ़ॉल्ट रूप से .ht * से शुरू होने वाली फाइलों तक पहुंच को अवरुद्ध करता है, इसलिए उनके लिए यादृच्छिक नामों का उपयोग करने की अनुशंसा नहीं की जाती है।
कैरी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.