2012-08-30 19 views
5

मैं एक वर्डप्रेस साइट पर काम कर रहा हूं, और मेरे पृष्ठ एक परमालिंक संरचना का उपयोग कर रहे हैं जो उन्हें निर्देशिकाओं की तरह दिखने के लिए mod_rewrites करता है। कुछ पृष्ठों के लिए मैं कुछ पृष्ठों की सुरक्षा के लिए मूल प्रमाणीकरण का उपयोग करना चाहता हूं। मैं इसे अपने .htaccess फ़ाइल में कैसे लिखूं? क्या मैं फ़ाइल की रक्षा कर रहा हूं, या फिर लिखित पता?.htaccess, mod_rewrite, और मूल प्रमाणीकरण

+0

सफल होने के करीब आने वाली एकमात्र चीज है, मैंने एक यूआरएल को दोस्ताना यूआरएल (यानी/दोस्ताना /) के रूप में नामित किया है और प्रमाणीकरण का अनुरोध करते हुए एक .htaccess फ़ाइल डाली है। पृष्ठ पर जाकर, मुझे प्रमाण-पत्रों के लिए कहा गया था और फिर 403 निषिद्ध त्रुटि पर भेजा गया था। – Imaginary

उत्तर

7

आप इस के लिए mod_rewrite की जरूरत नहीं होगी, उम्मीद है कि, इस चाल करना चाहिए:

SetEnvIfNoCase Request_URI ^/some/path/to/protect require_auth=true 
SetEnvIfNoCase Request_URI ^/another/protected/path require_auth=true 

# Auth stuff 
AuthUserFile /var/www/htpasswd 
AuthName "Password Protected" 
AuthType Basic 

# Setup a deny/allow 
Order Deny,Allow 
# Deny from everyone 
Deny from all 
# except if either of these are satisfied 
Satisfy any 
# 1. a valid authenticated user 
Require valid-user 
# or 2. the "require_auth" var is NOT set 
Allow from env=!require_auth 

mod_auth और mod_env मॉड्यूल , mod_rewrite से अधिक precidence होना चाहिए तो अपने नकली निर्देशिका संरचना एक ही रहना चाहिए । आपको बस प्रत्येक के लिए SetEnvIfNoCase Request_URI ^/some/path/to/protect require_auth=true भरना होगा, फिर अपनी आवश्यकताओं के अनुरूप शेष लेखों को भरें।

+0

ठीक है, मैं पूरी तरह समझ नहीं पा रहा हूं कि ऐसा क्यों किया, लेकिन ... उसने ऐसा किया! आपको बहुत - बहुत धन्यवाद! मैं दिन के आधा के लिए यह पसीना था! – Imaginary

+0

@ आकस्मिक रूप से, यदि 'require_auth' पर्यावरण परिवर्तक * नहीं * सेट है, तो प्रमाणीकरण की कोई आवश्यकता नहीं है। शीर्ष सेट पर 'SetEnvIfNoCase' निर्देश जो वैरिएबल हैं यदि अनुरोध कुछ निर्देशिकाओं के लिए है (चाहे वे मौजूद हैं या नहीं)। –

+0

मुझे लगता है कि मुझे मिल गया है! बहुत साफ़। एक बार फिर धन्यवाद! – Imaginary

0

इस समाधान के साथ मेरी एकमात्र समस्या यह है कि रद्द बटन पर क्लिक करने से संरक्षित पृष्ठ दिखाई देगा। मैंने इसका उपयोग करके इसे हल करने का प्रयास किया:

RewriteCond %{REMOTE_USER} !user 
RewriteRule ^/protected-page /unauthenticated-page [R=401] 

लेकिन यह काम नहीं किया। मुझे यकीन नहीं है क्यों।

समस्या को हल करने के लिए त्वरित और गंदे मैं इस तरह

ErrorDocument 401 "You don't have access." 

जोड़ा एक रीडायरेक्ट मैं इस

ErrorDocument 401 '<html><head><meta http-equiv="refresh" content="0; url=/unauthenticated-page" /></head><body></body></html>' 
0

जो मुझे के रूप में एक ही समस्या के साथ यहाँ आया के लिए प्रयोग किया जाता है बनाने के लिए, .htaccess के साथ

AuthType Basic 
AuthName "some_name" 
AuthUserFile "/path/to/password/passwd" 
require valid-user 
<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteRule ^index\.php$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.php [L] 
</IfModule> 

नियमों से ऊपर काम कर रहे हैं नहीं के रूप में मैं उम्मीद (अधिकृत करते हैं, तो फिर से लिखने)

निर्देश विलय आदेश ("अगर" पिछले विलय कर दिया है)

comment from Alek करने के लिए धन्यवाद करते रहे कि

तो

की वजह से

जब मैं IfModule कोष्ठक हटा दिया, नियमों के लिए काम करने के लिए शुरू कर दिया है मुझे।