क्या यह Apache 2.4.7 में htaccess को सक्षम करने का एक सही तरीका है


46

"Htaccess को कैसे सक्रिय करें" के लगभग हर समाधान में, वे कहते हैं कि / etc / apache2 / साइट्स-उपलब्ध / डिफ़ॉल्ट फ़ाइल को संपादित करने की आवश्यकता है। लेकिन Apache 2.4.7 में ऐसी कोई फ़ाइल नहीं है

मैंने कहीं पढ़ा है कि नई डिफ़ॉल्ट फ़ाइल 000-default.conf है। तो मैंने उस एक को संपादित किया और लाइन जोड़ने की कोशिश की:

AllowOverride All

लेकिन Apache2 ने सही तरीके से पुनरारंभ नहीं किया और एक त्रुटि दी। एक Apache2 प्रलेखन से, मैंने पाया कि AllowOverride केवल <Directory>अनुभाग के तहत अनुमत है । फिर मैंने इसे जोड़ने की कोशिश की:

<Directory "/var/www">
AllowOverride All
</Directory>

और यह काम करने लगता है। लेकिन मुझे यकीन नहीं है कि मुझे वहाँ / var / www रखना चाहिए था। क्या यह ऐसा करने का एक सही तरीका है या मेरा कंप्यूटर किसी तरह उड़ जाएगा?


यह देखो। यह आपकी मदद कर सकता है। stackoverflow.com/questions/33062142/…
अवनीश अलोक

जवाबों:


58

tl; डॉ

हाँ यह सही तरीका है।
लेकिन अधिक अर्थपूर्ण होने के लिए : हाँ, यह निर्देशिका .htaccessमें सभी निर्देशों को ओवरराइड करने की अनुमति देने का सही तरीका है /var/www


जैसा कि आपको पता चला है, AllowOverrideकेवल Directoryअनुभाग के तहत अनुमति दी गई है ।

अपने उदाहरण का उपयोग करना:

<Directory "/var/www">
    AllowOverride All
</Directory>

यह अपाचे कह रहा है, कि सभी कॉन्फ़िगरेशन को /var/wwwऔर इसके सभी उप-निर्देशिकाओं (पुनरावर्ती) में ओवरराइड किया जा सकता है ।


बेहतर उदाहरण के लिए, विचार करें कि आपके वर्चुअल होस्ट में निम्नलिखित कॉन्फ़िगरेशन हैं:

<Directory "/var/www">
    AllowOverride All
</Directory>

<Directory "/var/www/uploads">
    AllowOverride Limit
</Directory>

और निम्नलिखित निर्देशिका संरचना:

var/
    www/
        .htaccess
        uploads/
            .htaccess
            a/
                .htaccess
            b/
                .htaccess
        code/
            .htaccess
            c/
                .htaccess
            d/
                .htaccess

मैंने यहां क्या किया, .htaccessनिर्देशिका की हर उप-निर्देशिका में एक बना है /var/www
यह आमतौर पर ऐसा नहीं होना चाहिए, लेकिन यह सिर्फ उदाहरण के लिए है

कॉन्फ़िगरेशन के साथ निर्देशिका संरचना की तुलना करने का अर्थ है कि फ़ोल्डर और उसके उप-निर्देशिकाओं के .htaccessअंदर सभी फाइलें, /var/wwwनिर्देशिका और इसकी उप-निर्देशिकाओं को छोड़कर /var/www/uploads, सभी प्रकार के निर्देशों को ओवरराइड कर सकती हैं।

लेकिन /var/www/uploadsऔर उसके उप-निर्देशिका केवल उपयोग कर सकते हैं .htaccessफ़ाइल ओवरराइड करने के लिए Allow, Denyऔर Orderनिर्देशों।

नोट: अपाचे 2.4 के रूप में (जो कि 13.10+ में डिफ़ॉल्ट रूप से उपलब्ध है) Allow, Denyऔर Orderनिर्देशों का नाम एकल निर्देश द्वारा प्रतिस्थापित किया गया था Require


39

पहले इस आदेश का उपयोग करके फिर से लिखना सक्षम करें:

sudo a2enmod rewrite

फिर Apache2 को फिर से शुरू करें:

sudo service apache2 restart

फिर sites-availableफ़ोल्डर में जाएं:

/etc/apache2/sites-available

संपादित करें फ़ाइल का नाम defaultऔर परिवर्तन AllowOverride noneकरने के लिए AllowOverride All। दो लाइनें हैं जहां यह बदलाव किया जाना है।

यह .htaccessआपके सर्वर VPS में काम करेगा ।

इसने एक Ubuntu 12.04.5 VPS पर काम किया।


3
डिफ़ॉल्ट नाम की कोई फ़ाइल नहीं है - लेकिन 000-default.conf नाम की एक फ़ाइल है
ताहिर यासीन

1
रीराइट को सक्षम करने के लिए याद दिलाने के लिए +1, मैं इसे याद कर रहा था और यह पता नहीं लगा सका कि सभी चीजें करने के बाद भी यह काम क्यों नहीं कर रहा है।
अब्दुल मन्नान

यह टिप्पणी अपाचे 2.2 के विन्यास को संदर्भित करती है, न कि 2.4 को। 2.4 में, defaultफ़ाइल को कहा जाता है 000-default.conf, और इसमें AllowOverride Noneरेखा नहीं होती है ।
बेन_नटाल

फ़ाइल है 000-default.confऔर इसे जोड़ना संभव नहीं है AllowOverride None, अगर आप अपाचे को फिर से लोड करते हैं तो त्रुटि देते हैं
क्रेकर

यदि आप सभी की जरूरत है mod_rewrite निर्देशों की अनुमति दी जा .htaccessकरने के लिए अति प्रयोग में है , इसका उपयोग करने के लिए बेहतर है AllowOverride FileInfo। हालाँकि FileInfo में पहले से ही निर्देशों का एक बड़ा सेट शामिल है, फिर भी आप बहुत सारे निर्देशों को ओवरराइड होने से रोकेंगे।
दान

3

मेरे मामले में, इसने इस तरह काम किया:
मुझे निम्नलिखित पंक्तियों को जोड़ना पड़ा:

Order allow, deny
Allow from all

तो यह इस तरह दिखता है:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

हालाँकि इससे आपकी समस्या ठीक हो सकती है, यह ओपी के प्रश्न से संबंधित नहीं है। आदेश और अनुमति निर्देश Apache2.2 और इससे पहले के निर्देश हैं। वे कुछ निर्देशिकाओं पर उपयोगकर्ताओं तक पहुंच की अनुमति देने / अस्वीकार करने के लिए उपयोग किए जाते हैं। इनका इस पर कोई प्रभाव नहीं पड़ता है कि .htaccess फ़ाइल में दिए गए निर्देशों को पार्स किया जाएगा या नहीं।
दान

2

यहां एक स्निपेट है कि अपाचे 2.4 में htaccess को डिफ़ॉल्ट कॉन्फ़िगरेशन को बदलने के बिना कैसे सक्षम किया जाए:

cat <<EOF> /etc/apache2/conf-available/allow-override.conf
<Directory "/var/www">
    AllowOverride all
</Directory>
EOF

a2enconf allow-override
service apache2 reload
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.