कैसे जांचें कि क्या mod_rewrite सर्वर पर सक्षम है?


104

वर्तमान में मैं lightspeed सर्वर के साथ होस्टिंग का उपयोग कर रहा हूं । होस्टिंग का कहना mod_rewriteहै कि सक्षम है, लेकिन मैं अपनी स्क्रिप्ट वहाँ काम नहीं कर सकता। जब भी मैं URL को एक्सेस करने की कोशिश करता हूं, तो यह 404 - रिटर्न नहीं मिला

मैंने उसी कोड को दूसरे सर्वर पर रखा है जो अपाचे के साथ चल रहा है। यह वहाँ पर काम कर रहा है। इसलिए मुझे लगता है, यह .htaccessऔर mod_rewriteमुद्दा है।

लेकिन होस्टिंग समर्थन अभी भी मेरे साथ जोर दे रहा है कि उनका mod_rewrite चालू है, इसलिए मैं जानना चाहूंगा कि मैं कैसे जांच सकता हूं कि यह वास्तव में सक्षम है या नहीं।

मैंने जांच करने की कोशिश की phpinfo(), लेकिन कोई किस्मत नहीं, मुझे mod_rewriteवहां नहीं मिला , क्या यह इसलिए है क्योंकि वे उपयोग कर रहे हैं lightspeed?

क्या जांच का कोई तरीका है? कृपया मेरी मदद करें। धन्यवाद।

FYI करें: मेरा .htaccessकोड है

Options -Indexes

<IfModule mod_rewrite.c>
DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
</IfModule>

मैंने भी इस तरह की कोशिश की

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

लेकिन वही परिणाम।

जवाबों:


98

कमांड लाइन से, टाइप करें

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

यदि पुनर्लेखन मोड पहले से ही सक्षम है, तो यह आपको बताएगा!


Mod rewrite को इनेबल करने का यह सबसे आसान तरीका है।
andromeda

3
हाँ ! बिल्कुल सही, एकदम सही।
जॉर्ज दिमित्रिदिस

काम किया। सरल और आसान। धन्यवाद
भगदड़ biplab

96
  1. यह देखने के लिए कि mod_rewrite मॉड्यूल सक्षम है या नहीं, अपने WAMP सर्वर के रूट फ़ोल्डर में एक नई php फ़ाइल बनाएं। निम्नलिखित दर्ज करें

    phpinfo();

  2. अपनी बनाई हुई फ़ाइल को अपने ब्राउज़र से एक्सेस करें।

  3. CtrlFएक खोज खोलने के लिए। 'Mod_rewrite' के लिए खोजें। यदि यह सक्षम है तो आप इसे 'लोडेड मॉड्यूल' के रूप में देखेंगे

  4. यदि नहीं, तो httpd.conf (Apache config file) खोलें और निम्न पंक्ति देखें।

    #LoadModule rewrite_module modules/mod_rewrite.so

  5. प्रारंभ में पाउंड ('#') चिह्न निकालें और इस फ़ाइल को सहेजें।

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

  7. अपने ब्राउज़र में उसी php फ़ाइल तक पहुँचें।

  8. 'Mod_rewrite' के लिए फिर से खोजें। आप इसे अब खोजने में सक्षम होना चाहिए।


9
मेरा मानना ​​है कि phpinfo () ने अपाचे लोडेड मॉड्यूल की रिपोर्ट की है जब PHP खुद को अपाचे मॉड्यूल के रूप में चलाया जा रहा है। ओपी बताता है कि PHP, लाइटस्पीड पर चल रहा है, जिसमें अपना mod_rewrite संगत रीराइट इंजन है।
Mrhhite

2
पहले चरण के लिए मुझे प्रवेश करना था: <; php इको phpinfo (); ?>
ग्रेग नो

7
ध्यान दें कि यदि आप PHP को CGI एप्लिकेशन के रूप में चला रहे हैं (जो कि phpinfo()"सर्वर API" फ़ील्ड "CGI / FastCGI" दिखाता है) तो यह विधि काम नहीं करेगी । phpinfo()सक्षम मॉड्यूल को सूचीबद्ध नहीं करेगा। उस स्थिति में, PHP CGI पर mod_rewrite की जांच कैसे करें देखें ।
रोरी ओ'केन

67

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

<VirtualHost *:80>
        ...
    <Directory "directory/of/your/.htaccess">
        AllowOverride All
    </Directory>
</VirtualHost>

मूल रूप से, यह सभी .htaccess निर्देशों के प्रसंस्करण की अनुमति देता है।


3
धन्यवाद। मैं तुम्हें एक बुडवीजर देना चाहता हूँ। <3
निशांत घोडके 6

इसका क्या मतलब ...है <Directory ...>? मैं वहाँ क्या रखूँगा? निर्देशिका .htaccess कहाँ है
जोहो पिमेंटेल फेरेरा

हाँ वास्तव में, ... कोट्स के बीच उल्लेख करना चाहिए "..." निर्देशिका जहां .htaccess है
João Pimentel Ferreira

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

1
रिचर्डइफ ने इस उत्तर के लिए आपके लिए काम किया और आपकी समस्या को हल किया जिसे आपको इसे सही मानना ​​चाहिए और @ जहमीम को उसका पुरस्कार देना चाहिए।
सिंथिया वी

18

यदि apache_get_modules () phpinfo में इस मॉड्यूल के बारे में मान्यता प्राप्त नहीं है या कोई जानकारी नहीं है (); अपने .htaccess फ़ाइल में उन पंक्तियों को जोड़कर mod rewrite का परीक्षण करने का प्रयास करें:

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

और mod_rewrite.php:

<?php echo "Mod_rewrite is activated!"; ?>

15

कंसोल:

<VirtualHost *:80>
        ...
    <Directory ...>
        AllowOverride All
    </Directory>
</VirtualHost>

sudo a2enmod rewrite
sudo service apache2 restart

मैंने इसे हल करने के लिए बहुत कोशिश की है और फिर जब यह कोशिश करता है तो यह मेरे लिए काम करता है। मेरे पास आखिरी अपाचे और ubuntu अब हैं।
फर्नांडो सांचिज

15

अगर

in_array('mod_rewrite', apache_get_modules())

रिटर्न trueतब मॉड-रीराइट किया जाता है।


PHP कोड के माध्यम से सक्षम या नहीं फिर से लिखना मॉड्यूल की जाँच करने के लिए एक पंक्ति समाधान सही।
शकील अहमद

12

PHP का अपरिभाषित apache_get_modules()फ़ंक्शन सक्षम मॉड्यूल की एक सूची देता है। mod_rewriteसक्षम होने की जाँच करने के लिए , आप अपने सर्वर पर निम्न स्क्रिप्ट चला सकते हैं:

<?php
print_r(apache_get_modules());
?>

यदि उपरोक्त उदाहरण विफल रहता है, तो आप अपनी .htaccessफ़ाइल का उपयोग करके मॉड-रीराइट को सत्यापित कर सकते हैं ।

htaccessदस्तावेज़ रूट में एक फ़ाइल बनाएँ और निम्नलिखित पुनर्लेखन जोड़ें:

RewriteEngine on

RewriteRule ^helloWorld/?$ /index.php [NC,L]

अब http://example.com/HelloWorld पर जाएं , आपको आंतरिक रूप से आपकी साइट के /index.php पेज पर भेज दिया जाएगा । अन्यथा, यदि मॉड-रीराइट को अक्षम किया गया है, तो आपको 500 आंतरिक सर्वर त्रुटि मिलेगी।

उम्मीद है की यह मदद करेगा।


मैं 7.2 का उपयोग करता हूं, apache_get_modules अपरिभाषित हो गया। क्या मुझे संपादन के बाद apache2 को पुनः आरंभ करना होगा .htaccess?
आदि प्रसादियो

1
नहीं, आपको htaccess का उपयोग करते समय अपने सर्वर को पुनरारंभ करने की आवश्यकता नहीं है।
अमित वर्मा

12

आप इसे टर्मिनल पर भी कर सकते हैं:

apachectl -M
apache2ctl -M

2daygeek से लिया गया


डेबियन 9 में, यह काम करता है लेकिन आपको रूट या उपयोग के रूप में लॉग इन होना चाहिएsudo
androsfat

11

यह CentOS पर काम करता है:

$ sudo httpd -M |grep rewrite_module

आउटपुट चाहिए rewrite_module (shared)


यह CentOS पर करने का सबसे अच्छा तरीका है, यह मानते हुए कि आपके पास ssh एक्सेस है। धन्यवाद, @radtek!
जॉन टी।

10

यदि यह कोड आपकी .htaccess फ़ाइल में है (mod_rewrite.c के लिए जाँच के बिना)

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

और आप अपनी साइट पर 500 सर्वर त्रुटि प्राप्त करने के साथ किसी भी पेज पर जा सकते हैं, मुझे लगता है कि यह कहना सुरक्षित है कि मॉड रीराइट पर स्विच किया गया है।


3
तो आप 500 त्रुटि के बिना साइट पर कुछ पृष्ठों तक पहुंच सकते हैं? आमतौर पर इसका मतलब होगा कि .htaccess फ़ाइल को पढ़ा जा रहा है कि mod_rewrite को स्विच किया जाना चाहिए। हालाँकि .htaccess को पढ़ा नहीं जा सकता है ... अपने .htaccess फ़ाइल के शीर्ष पर कुछ निरर्थक वर्ण लिखने का प्रयास करें, इससे 500 सर्वर त्रुटि के साथ कनेक्शन की मृत्यु हो जाएगी यदि Apache वास्तव में फ़ाइल पढ़ रही है। यदि यह पढ़ा जा रहा है, तो क्या आप एक URL का उदाहरण दे सकते हैं जो आपको लगता है कि काम करना चाहिए लेकिन नहीं?
क्लाइव

समस्या यह है, यह अपाचे सर्वर नहीं है, यह लाइटस्पीड है। मुझे कभी 500 त्रुटि नहीं मिलती है, मुझे केवल 404 त्रुटि मिलती है। इसलिए मुझे संदेह है कि .htaccess सक्षम नहीं है।
नाइट्राइडर

सबसे अधिक संभावना है कि, मैं बकवास चरित्रों को .htaccess में डालने की कोशिश करूंगा और देखूंगा कि क्या आपको 500 त्रुटि मिलती है जब आप सीधे एक गैर-लिखित पृष्ठ (जैसे index.php) पर जाते हैं। यदि नहीं, तो यह एक नया सवाल Lightspeed साथ .htaccess सक्षम करने के लिए कैसे पूछ पोस्टिंग के लायक हो सकता है
क्लाइव

5

आप php फ़ंक्शन का उपयोग कर सकते हैं

      apache_get_modules

और mod_rewrite के लिए जाँच करें

<pre>
<?php
print_r(apache_get_modules());
?>
</pre>

http://in2.php.net/apache_get_modules


2
apache_get_modules () केवल तभी काम करेगा जब PHP अपाचे मॉड्यूल के रूप में चल रहा हो। ओपी बताता है कि पीएचपी लाइट्सपीड पर चल रहा है।
Mrhhite

5

यदि आप लिनक्स सिस्टम में हैं, तो आप निम्न फ़ोल्डर में apache2 (मेरे मामले में) के लिए सभी सक्षम मॉड्यूल की जांच कर सकते हैं: / etc / apache2 / mods-available

cd /etc/apache2/mods-available

टाइप करने के लिए: ll -a
यदि आप php के लिए उपलब्ध मॉड्यूल की जाँच करना चाहते हैं (इस मामले में php 7) फ़ोल्डर /etc/php/7.0/mods-available

cd /etc/php/7.0/mods-available

टाइप करने के लिए: ll -a


4

बस एक नया पेज बनाएं और इस कोड को जोड़ें

 <?php
 if(!function_exists('apache_get_modules') ){ phpinfo(); exit; }
 $res = 'Module Unavailable';
 if(in_array('mod_rewrite',apache_get_modules())) 
 $res = 'Module Available';
?>
<html>
<head>
<title>A mod_rewrite availability check !</title></head>
<body>
<p><?php echo apache_get_version(),"</p><p>mod_rewrite $res"; ?></p>
</body>
</html>

और इस पृष्ठ को चलाएं तो पता चल सकेगा कि मॉड्यूल उपलब्ध है या नहीं, यदि नहीं तो आप अपनी होस्टिंग से पूछ सकते हैं या यदि आप इसे स्थानीय मशीन में सक्षम करना चाहते हैं तो wamp apache में फिर से मॉड्यूल को सक्षम करने के लिए संबंधित ट्यूटोरियल द्वारा इस youtube चरण की जाँच करें https://youtu.be/xIspOX9FuVU?t=1m43s Wamp सर्वर आइकन -> अपाचे -> अपाचे मॉड्यूल और फिर से लिखना मॉड्यूल विकल्प की जाँच करें


2

मुझे पता है कि यह प्रश्न पुराना है, लेकिन यदि आप अपनी अपाचे विन्यास फाइल को इसमें AllowOverride Allसे संपादित कर सकते हैंAllowOverride None

<Directory "${SRVROOT}/htdocs">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

सटीक नाम और जब संभव हो फ़ाइल का स्थान जिसे बदलना आवश्यक है, को बताना एक अच्छा विचार है। यह नए लोगों के लिए मददगार होगा। धन्यवाद
MindRoasterMir

यह भी ध्यान में रखा जाना चाहिए कि परिवर्तन तब ही प्रभावी होते हैं जब आप अपनी अपाचे को बहाल करते हैं। धन्यवाद
MindRoasterMir

1

आपको केवल यह जांचने की आवश्यकता है कि क्या फ़ाइल वहां है, टाइप करके

cat /etc/apache2/mods-available/rewrite.load

हो सकता है कि परिणाम पंक्ति के साथ टिप्पणी न की जाए #


1

इस कोड ने मेरे लिए काम किया:

if (strpos(shell_exec('/usr/local/apache/bin/apachectl -l'), 'mod_rewrite') !== false) echo "mod_rewrite enabled";
else echo "mod_rewrite disabled";

0

मुझे सटीक समस्या हो रही थी, मैंने इसे कस्टम संरचना पर क्लिक करके हल किया, फिर जोड़ना /index.php/%postname%/और यह काम करता है

आशा है कि यह किसी को उस तनाव से बचाता है जो मुझे पता था कि इसके साथ क्या गलत था।

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