mod-rewrite - Apache 2.2 के लिए mod_rewrite को कैसे सक्षम करें




(13)

<संपादित करें>

आपने देखा है कि mod_rewrite.so के बजाय mod_rewrite.s ने कहा - उम्मीद है कि यह आपके प्रश्न में एक टाइपो है और httpd.conf फ़ाइल में नहीं है! :)

</ संपादित करें>

मैं लिनक्स पर अपाचे का उपयोग करने के लिए अधिक उपयोग किया जाता हूं, लेकिन मुझे इसे दूसरे दिन करना था।

सबसे पहले, अपने अपाचे इंस्टॉल निर्देशिका में एक नज़र डालें। (मुझे लगता है कि आप इसे "सी: \ प्रोग्राम फ़ाइलें" में स्थापित कर लेंगे)

फ़ोल्डर में एक नज़र डालें: "सी: \ प्रोग्राम फ़ाइलें \ अपाचे सॉफ्टवेयर फाउंडेशन \ अपाचे 2.2 \ मॉड्यूल" और सुनिश्चित करें कि वहाँ mod_rewrite.so नामक एक फ़ाइल है। (यह होना चाहिए, यह डिफ़ॉल्ट स्थापना के हिस्से के रूप में प्रदान किया जाता है।

इसके बाद, "सी: \ प्रोग्राम फ़ाइलें \ अपाचे सॉफ्टवेयर फाउंडेशन \ Apache2.2 \ conf" खोलें और httpd.conf खोलें। सुनिश्चित करें कि रेखा:

#LoadModule rewrite_module modules/mod_rewrite.so

असम्बद्ध है

LoadModule rewrite_module modules/mod_rewrite.so

साथ ही, यदि आप डिफ़ॉल्ट रूप से RewriteEngine को सक्षम करना चाहते हैं, तो आप कुछ ऐसा जोड़ना चाहेंगे

<IfModule mod_rewrite>
    RewriteEngine On
</IfModule>

अपनी httpd.conf फ़ाइल के अंत तक।

यदि नहीं, तो सुनिश्चित करें कि आप निर्दिष्ट करते हैं

RewriteEngine On

कहीं आपकी .htaccess फ़ाइल में।

मुझे अपनी Vista मशीन पर अपाचे 2.2 का ताजा इंस्टॉल मिला है, सब कुछ ठीक काम करता है, मोड रीराइट को छोड़कर।

मैंने असम्बद्ध किया है

LoadModule rewrite_module modules/mod_rewrite.s

लेकिन मेरे पुनर्लेखन नियमों में से कोई भी काम करता है, यहां तक ​​कि सरल भी

RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404

मेरे द्वारा उपयोग किए जा रहे सभी नियम मेरी होस्टिंग पर काम कर रहे हैं, इसलिए उन्हें ठीक होना चाहिए, इसलिए मेरा सवाल है, क्या अपाचे कॉन्फ़िगरेशन में कोई छिपी हुई चीज़ है, जो मॉड रीराइट को अवरुद्ध कर सकती है?


mod_rewrite का उपयोग करने के लिए आप टर्मिनल में निम्न आदेश टाइप कर सकते हैं:

sudo a2enmod rewrite

Apache2 के बाद पुनरारंभ करें

sudo /etc/init.d/apache2 restart

या

sudo service apache2 restart

या नए एकीकृत सिस्टम नियंत्रण के अनुसार

sudo systemctl restart apache2

फिर, यदि आप चाहें, तो आप निम्न .htaccess फ़ाइल का उपयोग कर सकते हैं।

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

उपर्युक्त .htaccess फ़ाइल (यदि आपके DocumentRoot में रखा गया है) DocumentRoot ट्रैकेट में सभी ट्रैफ़िक को index.php फ़ाइल पर रीडायरेक्ट करेगा जब तक कि फ़ाइल मौजूद न हो।

तो, मान लें कि आपके पास निम्न निर्देशिका संरचना है और httpdocs DocumentRoot

httpdocs/
    .htaccess
    index.php
    images/
        hello.png
    js/
        jquery.js
    css/
        style.css
includes/
    app/
        app.php

Httpdocs में मौजूद कोई भी फ़ाइल उपरोक्त दिखाए गए .htaccess का उपयोग कर अनुरोधकर्ता को सेवा दी जाएगी, हालांकि, बाकी सब कुछ httpdocs/index.php रीडायरेक्ट किया जाएगा। आपकी एप्लिकेशन फ़ाइलों में includes/app उपलब्ध नहीं होगा।


यदि आप इस मुद्दे की जड़ जानते हैं तो आप इस मुद्दे को कैसे ठीक कर सकते हैं, इसके कई तरीके हैं।

समस्या 1

सबसे पहले, यह आपके अपाचे के साथ एक समस्या हो सकती है जिसमें mod_rewrite.c मॉड्यूल स्थापित या सक्षम नहीं है।

इस कारण से, आपको इसे निम्नानुसार सक्षम करना होगा

  1. अपना कंसोल खोलें और इसमें टाइप करें, यह:

    sudo a2enmod rewrite

  2. अपने अपाचे सर्वर को पुनरारंभ करें।

    service apache2 restart

समस्या 2

  1. उपर्युक्त के अतिरिक्त, यदि यह काम नहीं करता है, तो अपाचे फ़ाइल को अपाचे फ़ाइल (या तो apache2.conf, http.conf, या 000-default फ़ाइल) से ओवरराइड नियम बदलना होगा।

  2. "निर्देशिका / var / www /" खोजें

  3. "सभी को ओवरराइड करें" में "सभी को ओवरराइड करें" बदलें

समस्या 3

अगर आपको एक त्रुटि मिलती है जो रीराइटिट मॉड्यूल नहीं मिलती है, तो शायद आपका userdir मॉड्यूल सक्षम नहीं है। इस कारण से आपको इसे सक्षम करने की आवश्यकता है।

  1. इसे कंसोल में टाइप करें:

    sudo a2enmod userdir

  2. फिर पुनः सक्षम मॉड्यूल को सक्षम करने का प्रयास करें यदि अभी भी सक्षम नहीं है (ऊपर वर्णित है)।

इस पर आगे पढ़ने के लिए, आप इस साइट पर जा सकते हैं: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html


नया अपाचे संस्करण कुछ तरीकों से बदल गया है। यदि आपका अपाचे संस्करण 2.4 है तो आपको /etc/apache2/apache2.conf नाम की एक फ़ाइल apache2.conf । आपको इसे संपादित करना होगा (आपको रूट अनुमति होनी चाहिए)। इस तरह निर्देशिका पाठ बदलें

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

अब अपाचे को पुनरारंभ करें।

service apache2 reload

मुझे भरोसा है ये काम करेगा।


उबंटू में:

चलाएँ:

a2enmod rewrite

और फिर:

service apache2 restart

mod_rewrite अब सक्षम हो जाएगा!


टर्मिनल खोलें और a2enmod rewrite , यह अपाचे के लिए आपके mod_rewrite मॉड्यूल को सक्षम करेगा।

फिर /etc/apache2/sites-available और डिफ़ॉल्ट फ़ाइल संपादित करें। (इसके लिए आपको इस फ़ाइल और साइट-उपलब्ध फ़ोल्डर में लिखने योग्य अनुमतियां होनी चाहिए।)

मौजूदा लाइनों 4 से 14 के साथ नीचे बदलें

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

अब अपने apache को /etc/init.d/apache2 restart या service apache2 restart

फिर से साफ यूआरएल परीक्षण लें और इस बार यह पारित किया जाएगा।


मैं दृढ़ता से उन सभी को सलाह दूंगा जो .htacces फ़ाइलों में mod_rewrite निर्देशों को सक्षम करना चाहते हैं, ताकि सब कुछ अनुमति देने के बजाय AllowOverride FileInfo का उपयोग किया जा सके, क्योंकि इस पृष्ठ के सभी उत्तरों सुझाव देते हैं। इन सभी उत्तरों को देखने के लिए सदैव प्रस्तावित 'समाधान' के परिणामों को समझने की कोशिश करने के बजाए लंबे समय तक काम करता है-ठीक है-दृष्टिकोण। यह समझने की कोशिश करें कि आप अपने सर्वर पर क्या कर रहे हैं और विशेषाधिकारों को सीमित कैसे करें जिन्हें आपने अभी AllowOverride All साथ दिया है। RTFM! , यह विषय पर काफी स्पष्ट है। दोस्तों पर आओ, यह कोई रॉकेटसाइंस नहीं है, यह सिर्फ एक वेबसर्वर है!


मेरे लिए क्या काम किया (उबंटू में):

sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load

साथ ही, जैसा कि पहले ही उल्लेख किया गया है, सुनिश्चित करें कि AllowOverride all को /etc/apache2/sites-available/default के प्रासंगिक खंड में सेट किया गया है


मेरी स्थिति के लिए, मैंने किया था

RewriteEngine On

मेरे .htaccess , मॉड्यूल लोड होने के साथ, और यह काम नहीं कर रहा था।

मेरी समस्या का समाधान मेरी vhost प्रविष्टि को inlcude में संपादित करना था

AllowOverride all

प्रश्न में साइट के लिए <Directory> अनुभाग में।


पहली बार मैंने अपने ट्रैफिक को अनदेखा करने के लिए mod_rewrite नियमों के साथ संघर्ष किया, मैंने सीखा (निराशाजनक रूप से) कि मैंने उन्हें गलत <VirtualHost> में रखा था, जिसका मतलब था कि मेरा यातायात उन सभी को अनदेखा कर देगा चाहे वे कितने अच्छी तरह से लिखे गए हों। सुनिश्चित करें कि यह आपके साथ नहीं हो रहा है:

# Change the log location to suit your system. RewriteLog /var/log/apache-rw.log RewriteLogLevel 2

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

मेरे अनुभव के 100% में, मैंने पाया है कि रिवाइटलॉग ने मुझे अपने पुनर्लेखन नियमों के साथ समस्या की खोज करने में मदद की है। मैं इसे पर्याप्त सिफारिश नहीं कर सकता। आपकी समस्या निवारण में शुभकामनाएँ!

साथ ही, यह बुकमार्क आपका सबसे अच्छा दोस्त है: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog


ऐसा करने के लिए एक से अधिक तरीके स्पष्ट रूप से हैं, लेकिन मैं अधिक मानक का उपयोग करने का सुझाव दूंगा:

ErrorDocument 404 /index.php?page=404

मैंने इस लेख में एक लेख में लिखा है: http://www.jarrodoberto.com/articles/2011/11/enabling-mod-rewrite-on-ubuntu

सेटिंग आज़माएं: AllowOverride All

दूसरा सबसे आम मुद्दा मॉड रीराइट सक्षम नहीं है: a2enmod rewrite और फिर अपाचे को पुनरारंभ करना।


फिर भी एक और कारण (इस मामले के लिए नहीं, लेकिन शायद यह किसी के लिए कुछ नसों को बचाएगा) क्या PHP में छोटे खुले टैग <? phpinfo(); ?> <? phpinfo(); ?> <? phpinfo(); ?> डिफ़ॉल्ट रूप से अक्षम हैं। तो php दुभाषिया सादा पाठ के रूप में छोटे टैग के भीतर कोड संसाधित करेगा। पिछले संस्करणों में php यह सुविधा डिफ़ॉल्ट रूप से सक्षम थी। तो नया व्यवहार थोड़ा रहस्यमय हो सकता है।





apache mod-rewrite