2011-09-07 12 views
11

मैं अगर यह सेटअप करने के लिए संभव हो गया था एक सशर्त HTTP मूल प्रमाणीकरण .htaccess फ़ाइल में वर्चुअल होस्ट URL के आधार पर आवश्यकता सोच रहा था।.htaccess मूल auth?

उदाहरण मैं क्या के लिए mysite.com है और test.mysite.com समान निर्देशिका लेकिन पासवर्ड में एक ही कोड बेस से चलेंगे test.mysite.com की रक्षा है। यह सेटअप इस तरह से हो सकता है इतना है कि मैं अपने कोड शाखा के बाद से मेरे ऐप कोड देख सकते हैं जो vhost/url इसे से कार्य किया जा रहा है और से सामग्री की सेवा के लिए डेटाबेस लेने की जरूरत नहीं होगी।

उत्तर

19

mod_auth मॉड्यूल के साथ mod_setenvif का उपयोग कर आप इसे हल कर सकते हैं। कौन सा होस्ट पासवर्ड सुरक्षित है सेट करने के लिए SetEnvIfNoCase निर्देश का उपयोग करें। आप अतिरिक्त निर्देशों के एक जोड़े की आवश्यकता होगी पहुँच को पूरा करने के:

# Check for the hostname here 
SetEnvIfNoCase HOST ^test\.mysite\.com\.?(:80)?$ PROTECTED_HOST 
फिर Directory ब्लॉक के अंदर

(या बस बाहर खुले में) आप अपने प्रमाणन सामान सेटअप, कुछ इस तरह है:

AuthUserFile /var/www/test.mysite.com/htpasswd 
AuthType Basic 
AuthName "Password Protected" 

अब की आवश्यकता होती है/संतुष्ट सामान के लिए:

Order Deny,Allow 
Satisfy any 
Deny from all 
Require valid-user 
Allow from env=!PROTECTED_HOST 

यह कर देगा इसलिए किसी भी मेजबान कि ^test\.mysite\.com\.?(:80)?$ से मेल नहीं खाता प्रमाणन की आवश्यकता के बिना उपयोग करना होगा (Allow from env=!PROTECTED_HOST) लेकिन अन्यथा, हमें एक वैध उपयोगकर्ता (Require valid-user) की आवश्यकता है। Satisfy any यह सुनिश्चित करता है कि हमें केवल 2 में से एक की आवश्यकता है, या तो अनुमति या आवश्यकता है।

+0

मैं एक सशर्त केस सक्रिय करने की कोशिश कर रहा हूं लेकिन इसका परीक्षण करने के लिए का उपयोग करें, लेकिन यह काम नहीं करता है। कोई विचार? .. मैं इसका उपयोग कर रहा हूं: SetEnvIfNoCase होस्ट "dev.example.com" DEV ... और उसके बाद और' नियमित 'साइट के लिए ... – DM8

+0

@ DM8 क्या [ करता है] नहीं है यही कारण है कि (http://httpd.apache.org/docs/2.2/mod/core.html#ifdefine)। वे चर '-D' कमांड लाइन ध्वज द्वारा सेट किए गए हैं। वे पर्यावरण चर नहीं हैं। –

+0

हम्म, तो अलग अपाचे 2.4 (जो ... ब्लॉक है) करने के लिए उन्नत करने के लिए मेरे मेजबान के लिए इंतज़ार कर से। क्या मैं जिस व्यवहार की उम्मीद कर रहा था उसे पाने का कोई तरीका है? http: //turboflash.wordpress ... अपनी खोजों में मैं निम्न आलेख, जो इंगित करने के लिए वहाँ अपाचे 2.2x में ऐसा करने का _no_ तरीका है लगता है पाया।com/2010/05/27/apache-environment-variables-visibility-with-setenv-setenvif-and-rewriterule-directives/ – DM8

5

यहाँ एक समाधान जॉन लिन क्या प्रस्तावित के समान है, लेकिन RewriteCond का उपयोग कर होस्ट नाम की जांच करने के लिए:

RewriteEngine On 
RewriteCond %{HTTP_HOST} =protected.hostname.com 
RewriteRule ^.*$ - [E=DENY:1] 

AuthUserFile /path/to/htpasswd 
AuthName "Password please" 
AuthType Basic 

Order Deny,Allow 
Satisfy any 
Deny from all 
Require valid-user 
Allow from env=!DENY 
12

मैं था जॉन की समाधान क्रियान्वित करने में समस्याएं: हालांकि मैं अपाचे conf और नियमित अभिव्यक्ति के साथ काफी परिचित हूँ, प्रमाणीकरण हमेशा निकाल दिया। एक त्वरित से विश्लेषण करती है यह Allow from env=!PROTECTED_HOST लाइन की तरह देखा में लात नहीं था

लेकिन मैं एक और समाधान है कि वास्तव में मेरे लिए सुरक्षित लग रहा है पाया:।

मैं एक ही दस्तावेज़ जड़ की ओर इशारा करते दो डोमेन के लिए दो आभासी मेजबान बनाया (जिस तरह से पूरी तरह से अनुमति है)। Vhosts में से एक में मैंने बुनियादी लेख के लिए निर्देश जोड़े (सीधे vhost निर्देश ब्लॉक में)।

एक आकर्षण की तरह काम करता है। और मुझे एक बेहतर भावना है कि यह वास्तव में सुरक्षित है - घुसपैठियों के लिए द्वार खोलने वाले रेगेक्स पैटर्न में किसी भी विवरण को नजरअंदाज करने का कोई जोखिम नहीं है।

<VirtualHost *:80> 
    ServerName www.mysite.com 
    DocumentRoot "/path/to/common/doc/root" 

    <Directory "/path/to/common/doc/root"> 
     Options Indexes FollowSymLinks 
     AllowOverride All 
     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName protected.mysite.com 
    DocumentRoot "/path/to/common/doc/root" 

    <Directory "/path/to/common/doc/root"> 
     Options Indexes FollowSymLinks 
     AllowOverride All 
     Order allow,deny 
     Allow from all 

     AuthUserFile /path/to/htpasswd 
     AuthName "Password please" 
     AuthType Basic 
     Require valid-user 
    </Directory> 
</VirtualHost> 
+2

यह करने के लिए यह ** सही ** तरीका है। यदि आपको अलग-अलग कॉन्फ़िगर करने के लिए 2 vhosts की आवश्यकता है, तो आप 2 vhosts को कॉन्फ़िगर करें। एनवी var और 'किसी भी संतुष्ट' के साथ हैकी समाधान वास्तव में केवल तभी लागू किया जाना चाहिए यदि आप होस्टिंग कर रहे हैं तो आपको vhost/server config तक पहुंच नहीं मिलती है और आपको एक .htaccess समाधान के साथ छोड़ दिया जाता है। –