यदि mod_rewrite php में सक्षम है तो कैसे जांचें?


149

अगर अपाचे और आईआईएस में mod_rewriteसक्षम है, तो यह जांचना संभव है कि क्या मैं सोच रहा थाPHP

IIS के लिए ModRewrite मौजूद है। इसे जाँचेhere

तो, मैं एक PHP स्क्रिप्ट की तलाश कर रहा हूं जो Apache और IISmod_rewrite पर जांच करता है

क्या कोई ऐसी स्क्रिप्ट जानता है या एक लिख सकता है?

विशेष रूप से Microsoft IIS के लिए

धन्यवाद!

जवाबों:


125

यदि आप mod_php का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं apache_get_modules()। यह सभी सक्षम मॉड्यूल की एक सरणी लौटाएगा, इसलिए यह जांचने के लिए कि mod_rewriteक्या सक्षम है, आप बस कर सकते हैं

in_array('mod_rewrite', apache_get_modules());

दुर्भाग्य से, आप सीजीआई के साथ ऐसा करने की कोशिश कर रहे हैं, जो इसे थोड़ा और कठिन बना देता है।

आप निम्नलिखित का उपयोग करके इसका परीक्षण कर सकते हैं, हालांकि

strpos(shell_exec('/usr/local/apache/bin/apachectl -l'), 'mod_rewrite') !== false

यदि उपरोक्त स्थिति का मूल्यांकन किया जाता है true, तो mod_writeसक्षम है।


1
मुझे नहीं पता। यदि मॉड्यूल mod_rewriteस्थापित है , तो यह परीक्षण करता है। आईआईएस मॉड-पुनर्लेखन मॉड्यूल आप शायद का जिक्र कर रहे हैं एक बिल्कुल अलग और वाणिज्यिक उत्पाद है - यह अपाचे मॉड्यूल के साथ कोई संबंध नहीं है, यह एक पूरी तरह से अलग सवाल है और मैं इसे का उपयोग कर कोई अनुभव नहीं है।
काबा

यह सच है, इसलिए ठीक से कोई सामान्य स्क्रिप्ट नहीं है?
संबंध

@DCCord तब मुझे लगता है कि आप इसे CGI में उपयोग कर रहे हैं।
kba

नहींं, इसका उपयोग php स्क्रिप्ट में उत्तर और नीचे दिए गए उत्तर की तरह ही किया गया था। if (function_exists ('apache_get_modules')) {phpinfo (); मरने; } मेरे सर्वर पर हमेशा सच है ...
DrCord

2
@Gerep phpinfo()कई चीजों के लिए उपयोगी हो सकता है, लेकिन यदि आप एक ऐसी प्रणाली लिखना चाहते हैं जो इसका उपयोग करता है mod_rewriteअगर यह सक्षम है या अन्यथा कुछ अन्य व्यवहार में कमियां हैं, तो इसे प्रोग्रामेटिक रूप से पता लगाना उपयोगी है।
kba

94

कोड के इस टुकड़े को कॉपी करें और इसे पता लगाने के लिए चलाएं।


<?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>

अगर मुझे mod_php सक्षम नहीं है तो क्या phpinfo मुझे भी बताएगा?
ओवेन मैकलैक

2
हाँ हम phpinfo.php में देख सकते हैं सभी Apche के "लोड किए गए मॉड्यूल"
मोहिनी

52

मुझे क्रिश्चियन रॉय का समाधान पसंद है :

###  .htaccess

<IfModule mod_rewrite.c>

    # Tell PHP that the mod_rewrite module is ENABLED.
    SetEnv HTTP_MOD_REWRITE On

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # The rest of your rewrite rules here

</IfModule>

उसके बाद, आप अपने PHP कोड के लिए जाँच कर सकते हैं

    array_key_exists('HTTP_MOD_REWRITE', $_SERVER);

कोई विचार नहीं अगर यह IIS के साथ भी काम करता है (मेरे पास जांच करने का कोई तरीका नहीं है) लेकिन ऑड्स अच्छे हैं।


4
इसके साथ <IfModule mod_env.c>यह लगभग सही होगा। :)
RibeiroBreno

यह एक बहुत ही उपयोगी और सरल उपाय है और यह तब भी काम करता है जब PHP CGI के रूप में चल रहा हो
जोस बी

जैसा कि @RibeiroBreno ने उल्लेख किया है, <ifModule mod_env.c> के साथ यह लगभग सही होगा। यह मेरे लिए पूरी तरह से काम करता है।
कासेम

यदि PHP CGI के रूप में चल रहा है, तो यह जाने का तरीका है। खूबसूरती से काम करता है।
वोज्शिएक जकुबास

35

इस कोड के साथ info.php नामक एक फ़ाइल अपलोड करें और इसे चलाएं:

<?php 
phpinfo();

पृष्ठ पर mod_rewrite खोजें, और देखें कि क्या आप इसे लोड किए गए मॉड्यूल के तहत पा सकते हैं।


28

यह इतना मुश्किल नहीं है कि आप बस में पा सकते हैं phpinfo();

यहाँ छवि विवरण दर्ज करें

आशा है कि मददगार!

धन्यवाद


यह मेरे लिए सबसे तेज और सरल मार्ग था, क्योंकि मैं पहले से ही एक phpinfo कॉल / फ़ाइल के साथ सामान कर रहा था। धन्यवाद! :)
ब्रायन यू

@loyola, मैं अपनी टिप्पणी अपडेट नहीं कर सकता, इसलिए मैंने हटा दिया, धन्यवाद
vanduc1102

11

कमांड लाइन के माध्यम से हम सेंटो में यह कर सकते हैं

httpd -l

1
और अगर आप ubuntu पर हैं: apache2 -l
youanden

2
या Apachectl -M उबंटू में भी
बाटंडवा

यह केवल उन मॉड्यूल को दिखाता है जो संकलित किए गए थे।
जयरजो

2
httpd -M लोड स्टैटिक और शेयर्ड मॉड्यूल की सूची दिखाता है।
जयरोज़ो

7
<?php
phpinfo();
?>

भरी हुई मॉड्यूल पंक्ति में apache2handler में कॉन्फ़िगरेशन के नीचे देखें।

यह सरल और काम करता है।

<?php foreach( apache_get_modules() as $module ) echo "$module<br />";  ?>

7

यह जाँच का मेरा वर्तमान तरीका है यदि Apache और IIS दोनों के लिए Mod_rewrite सक्षम है

/**
 * --------------------------------------------------------------
 *  MOD REWRITE CHECK
 * --------------------------------------------------------------
 *                                        - By A H Abid
 * Define Constant for MOD REWRITE
 * 
 * Check if server allows MOD REWRITE. Checks for both 
 * Apache and IIS.
 * 
 */
if( function_exists('apache_get_modules') && in_array('mod_rewrite',apache_get_modules()) )
    $mod_rewrite = TRUE;
elseif( isset($_SERVER['IIS_UrlRewriteModule']) )
    $mod_rewrite = TRUE;
else
    $mod_rewrite = FALSE;
define('MOD_REWRITE', $mod_rewrite);

यह मेरी स्थानीय मशीन में काम करता है और मेरे IIS आधारित वेबहोस्ट में भी काम करता है। हालाँकि, एक विशेष अपाचे सर्वर पर, यह अपाचे के लिए काम नहीं करता था क्योंकि apache_get_modules () अक्षम था लेकिन mod_rewrite उस सर्वर में सक्षम था।


3

आप स्थापित अपाचे मॉड्यूल की एक सूची प्राप्त कर सकते हैं , और उसके खिलाफ जांच कर सकते हैं। शायद आप इसकी .dll (या linux समतुल्य) फ़ाइल को खोज कर इंस्टॉल कर सकते हैं।


@kba सीजीआई मोड में फिर कैसे जांच करें।
रविवि


1

एक और तरीका exec()

exec('/usr/bin/httpd -M | find "rewrite_module"',$output);

यदि mod_rewriteलोड किया जाता है तो यह आउटपुट में "rewrite_module" लौटाएगा।


0

एक और विचार, वास्तव में अधिक गंदे हैक, मॉड पुनर्लेखन के बारे में है सर्वर एक जरूरी नहीं कि php मुद्दा निर्भर करता है: क्यों नहीं, अगर आपके पास है, तो एक परीक्षण निर्देशिका बनाएं। इसमें एक .htaccess को फिर से लिखना test.php को लिखें, निर्देशिका को कॉल करें। http के माध्यम से और जाँच करें कि क्या आपको अपेक्षित परिणाम मिलता है जो आप test.php में डालते हैं।

वास्तव में, गंदा।


0

इस फ़ंक्शन का उपयोग करें:

function apache_module_exists($module)
{
    return in_array($module, apache_get_modules());
}

0

किसी ज्ञात फ़ाइल पर रीडायरेक्ट बनाने के बारे में और फिर जाँच करें कि क्या रीडायरेक्ट वास्तव में कर्ल के साथ काम करता है?


0

IIS हेरो और हेरोइड के लिए:

Mod_rewrite देखने के लिए कोई ज़रूरत नहीं है। बस रिवाइटर 2 को स्थापित करें मॉड्यूल और फिर .htaccess फ़ाइलों को आयात करें।

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