Apache 2.2 के लिए mod_rewrite को कैसे इनेबल करें


474

मैं अपने Vista मशीन पर अपाचे 2.2 की नई स्थापना प्राप्त कर चुका हूं, सब कुछ ठीक काम करता है, मॉड पुनर्लेखन को छोड़कर।

मैं असहज हो गया हूं

LoadModule rewrite_module modules/mod_rewrite.s

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

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

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


1
वास्तव में समस्या यह थी कि मेरे पास गलत रास्ता था, क्योंकि $ {DOCUMENT_ROOT} ने मुझे रूट डायरेक्टरी की ओर इशारा किया, जो होस्टिंग पर ठीक था, लेकिन लोकल पर गलत था, इसलिए समस्या सिर्फ रिवेरिटेनइन पर नहीं थी, जो मेरे पास पहले से ही थी
जैकब अर्नोल्ड

आप कृपया करने के लिए स्वीकार किए जाते हैं जवाब बदल सकते हैं यह एक ? वर्तमान स्वीकृत उत्तर के लेखक ने स्वीकार किया है कि यह पर्याप्त नहीं है।
शैडो विजार्ड ईआर फॉर यू

1
Ubuntu 12.04 LTS में mod_rewrite कैसे सक्षम करें (डेबियन में भी काम करना चाहिए) । यह स्थापना और सक्रियण को दिखाता है, नीचे दिए गए ट्यूटोरियल आश्चर्यजनक रूप से नहीं करते हैं :(
स्लीक

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

1
@Black यह httpd.conf नाम की अपाचे कॉन्फिग फाइल में है। मेरे पीसी में, यह निर्देशिका C: \ xampp \ Apache \ conf में है, क्योंकि मैंने Apache को XAMPP के साथ स्थापित किया है।
लेक्स सॉफ्ट

जवाबों:


1005

उपयोग करने के लिए 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) index.phpफ़ाइल में DocumentRootमौजूद सभी ट्रैफ़िक को तब तक रीडायरेक्ट करेगी जब तक कि फ़ाइल मौजूद न हो।

तो, मान लें कि आपके पास निम्न निर्देशिका संरचना है और 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सुलभ नहीं होंगी।


15
यहां के विचार UNIX CLI के लिए सही हैं, लेकिन कमांड केवल डेबियन आधारित लिनक्स वितरण के लिए काम करते हैं, न कि ओपी के विंडोज वातावरण के लिए।
जेसन रिकार्ड

17
a2enmod फिर से काम किया
डॉ। कैस्पर ब्लैक

98
इसके अलावा ध्यान दें: आप यह भी सुनिश्चित करें कि आपकी साइट के विन्यास है बनाने की जरूरत है AllowOverride Allक्रम में के लिए .htaccessफ़ाइल सब पर पढ़ने के लिए।
एडम रोसेनफील्ड

2
@ डेनिस आप a2dismod rewrite का उपयोग कर सकते हैं
जोनाथन मयंक

3
मैं a2enmod rewriteविंडोज़ में कैसे उपयोग कर सकता हूं ?
नमन

229

मेरी स्थिति के लिए, मेरे पास था

RewriteEngine On

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

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

AllowOverride all

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


10
दरअसल, VirtualHost फ़ाइल में मौजूद a2enmod rewriteव- RewriteEngine Onइन के साथ भी इसे काम करने से रोका जा सकेगा - यह वही है जो मुझे पकड़ा गया है, इसे एक आकर्षण की तरह काम करने के लिए बदल दिया गया है.htaccessAllowOverride allAllowOverride all
स्वर्ग

9
यहाँ शुरुआत .. VirtualHost फ़ाइल कहाँ है?
डेविनेट

3
यह जाने का रास्ता है ... मेरे पास इसके अलावा सब कुछ निर्धारित था।
arrayown

2
AllowOverrideनिर्देश निर्धारित करता है "निर्देशों के प्रकार है कि में अनुमति दी जाती .htaccessफ़ाइलें"। इसके अलावा, "जब यह निर्देश सेट किया जाता है None, तो .htaccessफ़ाइलों को पूरी तरह से अनदेखा कर दिया जाता है। इस मामले में, सर्वर .htaccessफाइल सिस्टम में फ़ाइलों को पढ़ने का प्रयास भी नहीं करेगा ।" आधिकारिक डॉक्स: httpd.apache.org/docs/2.2/mod/core.html#allowoverride
John

इसने मेरे लिए यह तय कर दिया - मेरे पास एक मुद्दा था कि वर्डप्रेस सुंदर परमालिंक ठीक से काम नहीं कर रहा है। यदि आप करते हैं a2enmod rewriteऔर फिर VirtualHosts फ़ाइल में 'AllowOverride None' को 'AllowOverride All' में बदल देते हैं तो यह काम करना चाहिए। यदि आप एक ही सर्वर (और IP पते) के लिए कई डोमेन नाम चला रहे हैं तो VirtualHosts फ़ाइल लागू होती है। आपने इसे डोमेन सेट अप करने के लिए सेट किया होगा।
जेसन प्रेस्टन

83

सेट करके देखें: AllowOverride All


दूसरा सबसे आम मुद्दा mod rewrite enable नहीं है: a2enmod rewriteऔर फिर Apache को पुनरारंभ करें।


यह # 1 उत्तर होना चाहिए क्योंकि यह एक समस्या को हल करता है जो डिफ़ॉल्ट ubuntu स्थापना में हो रहा है!
सालिक

1
यह किसी भी अन्य अपाचे विन्यास को ओवरराइड करने की अनुमति देगा। यह अनुशंसित नहीं है।
भार्गव नानकेलावा

हाँ :) यह मेरी समस्या भी थी, लेकिन यहाँ वह जगह है जो आप मेरे जैसे बदमाशों के लिए समझा रहे हैं कि यह "AllowOverride All" /etc/apache2/sites-available/.sitename/conf और [sitename-ssl] में है .conf। मुझे आपकी वजह से एक दूसरा शोध करना पड़ा: D, वैसे!
मेटाट्रॉन

77

यदि उपरोक्त कार्यों में से कोई भी संपादन / etc / apache2 / sites-enable / 000-default की कोशिश करता है

शीर्ष पर आप पाएंगे

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

बदले AllowOverride Noneके लिएAllowOverride All

यह मेरे लिए काम किया


से परिवर्तित त्रुटि/laravel/public/authors was not found on this server/index.php was not found on this server
गंगाराजू २ 27'१३

खिचड़ी भाषा <निर्देशिका>, केवल <VirtualHost *: 80>
निकोलस एसएक्सयू

1
@ निकोलस। Xu ने इसे <VirtualHost *: 80> टैग
wimdetr

मैंने ऐसा ही किया है, लेकिन <Directory /var/www/html>इस फ़ोल्डर से और केवल नियम लागू करने के लिए एक नया खंड जोड़ा है ।
लुई लाउडोग ट्रॉटियर

44

उबंटू में:

Daud:

a2enmod rewrite

और फिर:

service apache2 restart

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


28

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

समस्या 1

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

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

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

    sudo a2enmod rewrite

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

    service apache2 restart

समस्या २

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

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

  3. "ओवरराइड कोई नहीं" को "ओवरराइड ऑल" में बदलें

समस्या 3

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

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

    sudo a2enmod userdir

  2. फिर फिर से सक्षम नहीं होने पर फिर से लिखना मॉड्यूल को सक्षम करने का प्रयास करें (जैसा कि ऊपर उल्लेख किया गया है)।

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


2
मुद्दे का शानदार तोड़।
बानागो

इसका उपयोग न करें AllowOverride Allक्योंकि यह बहुत सारे खतरों की विशेषताओं को सक्षम करेगा (जैसे पर्ल स्क्रिप्ट का उपयोग करना)। इसके बजाय उपयोग करेंAllowOveride Options
Marki555

28

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

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

अब अपाचे को रीस्टार्ट करें।

service apache2 reload

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


यह अप टू डेट उत्तर है।
पौल जूल

1
यदि आप 2019 और उसके बाद के हैं, तो कृपया इस उत्तर को आगे बढ़ाएं :)
लुइज़ कैवलन्ती

27

ओपन टर्मिनल और टाइपिन 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>

अब अपनी अपाचे को पुनः आरंभ करें /etc/init.d/apache2 restartयाservice apache2 restart

फिर से स्वच्छ URL परीक्षण करें और इस बार इसे पास किया जाएगा।


15

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

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

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

मुझे लिनक्स पर अपाचे का उपयोग करने की अधिक आदत है, लेकिन मुझे दूसरे दिन ऐसा करना पड़ा।

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

फ़ोल्डर में देखें: "C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ मॉड्यूल" और सुनिश्चित करें कि वहाँ एक फ़ाइल है, जिसे mod_rewrite.so कहा जाता है। (यह होना चाहिए, यह डिफ़ॉल्ट इंस्टॉल के भाग के रूप में प्रदान किया गया है।

अगला, "C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ conf" खोलें और httpd.conf खोलें। सुनिश्चित करें कि लाइन:

#LoadModule rewrite_module modules/mod_rewrite.so

अनियोजित है:

LoadModule rewrite_module modules/mod_rewrite.so

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

<IfModule mod_rewrite>
    RewriteEngine On
</IfModule>

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

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

RewriteEngine On

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


@gabehabe आपका अवतार बस ऐसा लग रहा था जैसे यह एक आइकन मेरे डॉक्टर, लोल को पकड़े हुए था
जोनाथन डॉस सैंटोस

5

मैंने बस यही किया

sudo a2enmod rewrite

फिर आपको आदेश का पालन करके अपाचे सेवा को फिर से शुरू करना होगा

sudo service apache2 restart

4

पुराना धागा, बस वह लगाना चाहते हैं जो AllowOverride को सभी के लिए सेट न करे बजाय इसके कि आप जिस विशिष्ट मॉड का उपयोग करना चाहते हैं, उसका उपयोग करें

AllowOverride mod_rewrite mod_mime

और इस लाइन को अन-कमेंट किया जाना चाहिए

LoadModule rewrite_module modules/mod_rewrite.so

refrences


4

नीचे दिए गए आदेश का उपयोग करें

sudo a2enmod rewrite

और नीचे दिए गए कमांड के माध्यम से पुनः आरंभ करें

sudo service apache2 restart

3

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

ErrorDocument 404 /index.php?page=404

3

पहली बार जब मैंने अपने ट्रैफ़िक को नज़रअंदाज़ करते हुए 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


2

मेरे लिए क्या काम किया (ubuntu में):

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

इसके अलावा, जैसा कि पहले ही उल्लेख किया गया है, सुनिश्चित करें AllowOverride allकि संबंधित अनुभाग में सेट किया गया है/etc/apache2/sites-available/default

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