.htaccess अपाचे काम नहीं कर रहा है


135

मेरे पास लिनक्स ubuntu पर चलने वाली AWS EC2 सेवा का एक सर्वर है और मैंने Apache, php और mysql स्थापित किया है।

मैंने .htaccessअपने दस्तावेज़ रूट में एक फ़ाइल जोड़ी है /var/www/html

मैंने इसमें यह कोड दर्ज किया है: ErrorDocument 404 /var/www/html/404.phpऔर यह अभी भी दिखाई नहीं दे रहा है।

मैंने इस आदेश को कई बार दर्ज किया: sudo service httpd restartसर्वर को पुनरारंभ करने के लिए लेकिन कोई भी परिवर्तन नहीं दिखा ...

मैं इसे कैसे ठीक कर सकता हूं ... क्या मैंने कुछ गलत किया है?

अग्रिम में धन्यवाद!


2
क्या आप वाकई 400 Bad Requestत्रुटि को मैप करना चाहते हैं /var/www/html/404.php?
जॉन लिन

जवाबों:


288

सबसे पहले, ध्यान दें कि httpd को पुनरारंभ करना .htaccess फ़ाइलों के लिए आवश्यक नहीं है। .htaccess फाइलें विशेष रूप से उन लोगों के लिए होती हैं जिनके पास रूट नहीं है - यानी, httpd सर्वर कॉन्फिग फाइल तक पहुंच नहीं है, और सर्वर को पुनरारंभ नहीं कर सकते हैं। जैसा कि आप सर्वर को पुनरारंभ करने में सक्षम हैं, आपको .htaccess फ़ाइलों की आवश्यकता नहीं है और सीधे मुख्य सर्वर कॉन्फ़िगरेशन का उपयोग कर सकते हैं।

दूसरे, यदि .htaccess फ़ाइलों को अनदेखा किया जा रहा है, तो आपको यह देखने के लिए जांचने की आवश्यकता है कि AllowOverride सही ढंग से सेट है। देखें http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride जानकारी के लिए। आपको यह भी सुनिश्चित करने की आवश्यकता है कि यह सही दायरे में सेट किया गया है - अर्थात, आपके कॉन्फ़िगरेशन में सही ब्लॉक में। सुनिश्चित करें कि आप ब्लॉक को संपादित नहीं कर रहे हैं , उदाहरण के लिए।

तीसरा, यदि आप यह सुनिश्चित करना चाहते हैं कि एक .htaccess फ़ाइल वास्तव में पढ़ी जा रही है, तो उसमें कचरा डालें। एक अवैध लाइन, जैसे कि "INVALID LINE HERE", आपकी .htaccess फ़ाइल में, जब आप अपने ब्राउज़र को उस फ़ाइल वाली निर्देशिका में इंगित करते हैं, तो 500 सर्वर त्रुटि होगी। यदि ऐसा नहीं होता है, तो आपके पास AllowOverride को सही तरीके से कॉन्फ़िगर नहीं किया गया है।


141
डायग्नोस्टिक टूल के रूप में .htaccess फाइल में कचरा डालने के लिए +1।
२१:

46
प्रोग्रामिंग में कचरा लगता है की तुलना में अधिक उपयोगी है।
EnKrypt

1
मैंने "A STRING" अपने .htaccess में रखा, इसलिए मुझे एक त्रुटि प्राप्त होगी, इसलिए मैंने अपने डेबियन AllowOverride Allमें सभी apache2.confको डाल दिया और यह काम करता है
एलेक्स

1
ध्यान दें कि AllowOverrideकेवल <Directory>निर्देशों में काम करता है और अगर अंदर रखा जाता है तो इसे नजरअंदाज कर दिया जाएगा<Location ...> अनुभाग के , देखें: httpd.apache.org/docs/2.4/mod/core.html#allowoverride
डैनियल

2
यह भी ध्यान दें कि <Directory>निर्देश सापेक्ष के बजाय एक पूर्ण मार्ग की अपेक्षा करता है। मेरे मामले में, काम करते समय <Directory /> असफल रहा<Directory /var/www/html/subdir>
लुकास नुथ

115
  1. Apache mod_rewrite मॉड्यूल सक्षम करें

    a2enmod rewrite

  2. निम्न कोड जोड़ें /etc/apache2/sites-available/default

    AllowOverride All

  3. फिर से शुरू करें

    /etc/init.d/apache2 restart


7
ध्यान दें कि अपाचे 2.4 में / etc / apache2 / sites-available के तहत विन्यास फाइल अब .conf में समाप्त होनी चाहिए। और मैं अपने सर्वर पर कुछ डिफ़ॉल्ट / etc / apache2 / sites-available और एक / etc / apache2 /
rubo77

2
धन्यवाद, मेरे मामले में apache2 में डिफ़ॉल्ट रूप से पुनर्लेखन को सक्षम नहीं किया गया था
क्रॉस

मैं पहले से ही इस कदम का पालन करता हूं, लेकिन यह अपाचे 2.4 में काम नहीं कर रहा है जो मैं गलत कर रहा हूं = [
लुसियानो एंड्रेस मार्टिनी

ऐसा लगता है कि आईपी ओवरराइड्स को प्रमाणीकरण की आवश्यकता होती है, यह व्यवहार अप्रत्याशित है (Apache 2.2 में कुछ निश्चित IP से अनुमति दें ऐसा न करें) और मेरी राय में यह बहुत खतरनाक हो सकता है, क्योंकि IP अपवाद प्रमाणीकरण का अनुकरण कर रहे हैं, Apache 2.2 में वे पूरी तरह से अलग चीजें हैं !
लुसियानो अंड्रेस मार्टिनी

मैंने पहला कदम छोड़ दिया, लेकिन मेरे अपाचे में सभी के लिए AllowOverride को बदल दिया ।conf (Debian 8, /etc/apache2/apache.conf), पुनः आरंभ किया गया और फाइलें सुलभ नहीं हैं, अच्छा है। लेकिन त्रुटि की अनुमति से इनकार नहीं है, लेकिन 500 आंतरिक सर्वर त्रुटि, ऐसा क्यों है? क्या मैं इसे ठीक कर सकता हूँ?
dasLort

44

यदि आपने उपरोक्त सभी को आज़माया है, जो सभी मान्य और अच्छे उत्तर हैं, और आपकी htaccess फ़ाइल काम नहीं कर रही है या apache2.confफ़ाइल में निर्देश को बदलकर पढ़ा जा रहा है । उबंटू के तहत रास्ता है/etc/apache2/apache2.conf

<Directory>अपने सार्वजनिक वेब पृष्ठों की ओर इशारा करते हुए निर्देश बदलें , जहां htaccess फ़ाइल रहती है। से बदलें AllowOverride Noneकरने के लिएAllowOverride All

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

मुझे भी यही समस्या थी और उबंटू पूछें पर उत्तर और स्पष्टीकरण मिला! मंच /ubuntu/421233/en enable- htaccess- file- to- rewrite- path- not- working


2
या, इसे VHost
-

दरअसल, फ़ाइल को पढ़ने और उपयोग करने के AllowOverride FileInfoलिए केवल 3 लाइन में ही आवश्यक है .htaccessAllअतिरिक्त कॉन्फ़िगरेशन ओवरराइड को भी सक्षम करता है, जैसे .httpasswd(जिसके Authconfigबजाय व्यक्तिगत रूप से सक्षम किया जा सकता है All)।
रफाल

20

के लिए Ubuntu,
सबसे पहले, इस कमांड चलाएँ: -

sudo a2enmod rewrite

फिर, /etc/apache2/sites-available/000-default.confइस कमांड का उपयोग करके नैनो या विम का उपयोग करके फाइल को संपादित करें : -

sudo nano /etc/apache2/sites-available/000-default.conf

फिर 000-default.confफ़ाइल में, लाइन के बाद इसे जोड़ें DocumentRoot /var/www/html। यदि आपकी रूट html निर्देशिका कुछ और है, तो यह लिखें कि: -

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

सब कुछ करने के बाद, कमांड का उपयोग करके अपाचे को पुनरारंभ करें sudo service apache2 restart


6

बस 3 चरणों का पालन करें

  1. निम्न आदेश का उपयोग करके mode_rewrite सक्षम करें

    सुडो a2enmod फिर से लिखना

पासवर्ड पूछा जाएगा। इसलिए अपना पासवर्ड डालें

  1. अपने 000-default.conf या default.conf फ़ाइल को / etc / apache2 / sites-available / पर अपडेट करें निर्देशिका में । आप इसे सीधे संपादित नहीं कर सकते। इसलिए खोलने के लिए निम्नलिखित आदेश का उपयोग करें

    sudo gedit /etc/apache2/sites-available/000-default.conf

या सूदो गेदित /etc/apache2/sites-available/default.conf

तुम्हे मिल जाएगा

DocumentRoot / var / www / html

या

DocumentRoot / var / www

लाइन। इसके बाद निम्न कोड जोड़ें।

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

उपयोगकर्ता को निर्देशिका टैग पथ बनाओ जैसा कि आपकी फ़ाइल में दिखाया गया है।

  1. निम्न आदेश का उपयोग करके अपने अपाचे सर्वर को पुनरारंभ करें

    sudo service apache2 पुनरारंभ


धन्यवाद। ब्राज़ील से शुभकामनाएं।
फॉक्स.11

5

सबसे शायद, AllowOverride कोई नहीं पर सेट है। Apache2.conf के निर्देशिका अनुभाग में / etc / apache2 फ़ोल्डर में स्थित है

इसे सभी AllowOverride पर सेट करने का प्रयास करें


5

मेरे अनुभव में, / var / www / निर्देशिका निर्देश सबफ़ोल्डर virtualhost निर्देशों को रोकता है। इसलिए यदि आपने सभी सुझावों की कोशिश की थी और अभी भी काम नहीं कर रहे हैं और आप वर्चुअलहोस्ट का उपयोग कर रहे हैं तो यह कोशिश करें;

1 - सुनिश्चित करें कि आप में AllowOverride Allनिर्देश है /etc/apache2/sites-available/example.com.conf

2 - चेक / var / www / निर्देशिका निर्देश /etc/apache2/apache2.conf(संभवतः पंक्ति 164 में), जो दिखता है;

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

यदि कोई AllowOverride Noneनिर्देश है तो उसे AllowOverride All या बस से बचकर निकलें


3

डिफ़ॉल्ट रूप से, अपाचे फिर से लिखने के नियमों को लागू करने के लिए एक .htaccess फ़ाइल का उपयोग करने पर प्रतिबंध लगाता है

चरण 1 - mod_rewrite सक्षम करना (यदि सक्षम नहीं है) पहले, हमें mod_rewrite को सक्रिय करने की आवश्यकता है। यह उपलब्ध है लेकिन एक साफ अपाचे 2 स्थापना के साथ सक्षम नहीं है।

$ sudo a2enmod rewrite

यह मॉड्यूल को सक्रिय करेगा या आपको सचेत करेगा कि मॉड्यूल पहले से ही सक्षम है। इन परिवर्तनों को प्रभावी बनाने के लिए, Apache को पुनरारंभ करें।

$ sudo systemctl restart apache2

mod_rewrite अब पूरी तरह से सक्षम है। अगले चरण में हम एक .htaccess फ़ाइल सेट करेंगे जिसका उपयोग हम रीडायरेक्ट के लिए पुनर्लेखन नियमों को परिभाषित करने के लिए करेंगे।

चरण 2 - सेटअप ।htaccess नैनो या अपने पसंदीदा पाठ संपादक का उपयोग करके डिफ़ॉल्ट अपाचे कॉन्फ़िगरेशन फ़ाइल खोलें।

$ sudo nano /etc/apache2/sites-available/000-default.conf

उस फ़ाइल के अंदर, आपको पहली पंक्ति पर एक ब्लॉक शुरू होगा। उस ब्लॉक के अंदर, निम्न नया ब्लॉक जोड़ें ताकि आपकी कॉन्फ़िगरेशन फ़ाइल निम्न की तरह दिखे। सुनिश्चित करें कि सभी ब्लॉक ठीक से इंडेंट हैं।

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
    <Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    . . . 
</VirtualHost>

फ़ाइल को सहेजें और बंद करें। इन परिवर्तनों को प्रभावी बनाने के लिए, Apache को पुनरारंभ करें।

$ sudo systemctl restart apache2

किया हुआ। आपका .htacess काम करना चाहिए। यह लिंक वास्तव में किसी को मदद कर सकता है https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-16-04


मेरे लिए काम करने वाला रिस्टार्ट कमांड है $ sudo httpd -k restart(रेड हैट 4.4.7-23)
हिमालय गर्ग

3

मैंने इस उपयोग को मंजूरी दे दी। इस साइट का उपयोग करके यहां क्लिक करें, चरणों का पालन करें, वही चरण ubuntu संस्करण 18.04 तक चलता है


1

में WampServerओपन wampserver ट्रे आइकन ----> अपाचे ---> अपाचे मॉड्यूल ---> rewrite_module



0

पूर्णता के लिए, यदि "AllowOverride All" आपकी समस्या को ठीक नहीं करता है, तो आप इस समस्या का उपयोग करके डीबग कर सकते हैं:

  1. भागो apachectl -Sऔर यदि आप एक से अधिक namevhost है देखते हैं। यह हो सकता है कि httpd किसी अन्य DocumentRoot के .htaccess की तलाश में है।

  2. उपयोग करें strace -f apachectl -Xऔर देखें कि यह कहाँ से लोड हो रहा है (या लोड नहीं हो रहा है)।

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