Php mod_rewrite etkin olup olmadığını nasıl kontrol edilir?


149

O kontrol etmek mümkün olup olmadığını merak ediyorum mod_rewriteetkinleştirildiğinde Apache VE IIS içinde PHP.

IIS için ModRewrite var. Kontrol edin here.

Yani, Apache ve IISmod_rewrite üzerinde kontrol eden bir PHP betiği arıyorum .

Herkes böyle bir senaryo biliyor mu veya bir senaryo yazabilir mi?

Özellikle Microsoft IIS için .

Teşekkürler!

Yanıtlar:


125

Mod_php kullanıyorsanız, kullanabilirsiniz apache_get_modules(). Bu, tüm etkin modüllerin bir dizisini döndürür, bu nedenle mod_rewriteetkin olup olmadığını kontrol etmek için

in_array('mod_rewrite', apache_get_modules());

Ne yazık ki, büyük olasılıkla bunu biraz daha zorlaştıran CGI ile yapmaya çalışıyorsunuz.

Yine de aşağıdakileri kullanarak test edebilirsiniz

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

Eğer yukarıdaki durum değerlendirir için true, daha sonra mod_writeetkindir.


1
Bilmiyorum. Bu modülün mod_rewritekurulu olup olmadığını test eder . IIS Mod-Rewrite muhtemelen Bahsettiğiniz modül tamamen farklı ve ticari üründür - bu Apache modülü ile hiçbir ilgisi yoktur, tamamen farklı bir soru ve bunu kullanarak hiçbir deneyimim var.
kba

Bu doğru, yani düzgün bir genel senaryo yok mu?
Kravatlar

@DrCord O zaman sanırım onu ​​CGI'da kullanıyorsunuz.
kba

hayır, aşağıdaki cevap ve cevap gibi bir php betiğinde kullanıyordum. if (! function_exists ('apache_get_modules')) {phpinfo (); ölmek; } sunucumda her zaman doğrudur ...
DrCord

2
@Gerep phpinfo()birçok şey için yararlı olabilir, ancak mod_rewriteetkinleştirilmişse veya başka bir davranışa başka şekilde düşerse kullanan bir sistem yazmak istiyorsanız , bunu programlı olarak algılamak yararlı olacaktır.
kba

94

Bu kod parçasını kopyalayın ve öğrenmek için çalıştırın.


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

Phpinfo mod_php etkin değilse bana söyler mi?
Owen McAlack

2
evet phpinfo.php tüm Apche "Yüklü Modüller" görebilirsiniz
Mohini

52

Christian Roy'un çözümünü seviyorum :

###  .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>

Ardından, PHP kodunuzu

    array_key_exists('HTTP_MOD_REWRITE', $_SERVER);

Bu da IIS ile çalışıp çalışmadığını bilmiyorum (kontrol etmek için bir yol yok) ama oranlar iyi.


4
Bir <IfModule mod_env.c>ile neredeyse mükemmel olurdu. :)
RibeiroBreno

Bu çok kullanışlı ve basit bir çözümdür ve PHP CGI olarak çalışıyor olsa bile işe yarar
Jose B

@RibeiroBreno'nun belirttiği gibi, <IfModule mod_env.c> ile neredeyse mükemmel olurdu. bu benim için mükemmel çalıştı.
Kassem

PHP CGI olarak çalışıyorsa, bu yol. Güzel çalışıyor.
Wojciech Jakubas

35

Bu kodla info.php adlı bir dosya yükleyin ve çalıştırın:

<?php 
phpinfo();

Sayfada mod_rewrite öğesini arayın ve Yüklü Modüller altında bulabileceğinizi görün.


28

o kadar zor yapmayın, sadece bulabilirsin phpinfo();

resim açıklamasını buraya girin

Umarım yardımcı olur!

Teşekkürler


Zaten bir phpinfo çağrı / dosya ile şeyler yapıyordu çünkü bu benim için en hızlı ve en basit yoldu. Teşekkürler! :)
Brian U

@loyola, yorumumu güncelleyemiyorum, bu yüzden sildim, teşekkür ederim
vanduc1102

11

Komut satırı üzerinden biz centOs biz bunu yapabiliriz

httpd -l

1
Ve eğer ubuntu üzerindeyseniz: apache2 -l
youanden

2
Veya Ubuntu'da da -M
Batandwa

Bu sadece derlenmiş modülleri gösteriyor.
jayarjo

2
httpd -M , yüklü Statik ve Paylaşılan modüllerin listesini gösterir.
jayarjo

7
<?php
phpinfo();
?>

Yüklü Modüller satırındaki apache2handler içindeki Konfigürasyon bölümüne bakın.

Bu basit ve işe yarıyor.

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

7

Mod_rewrite'ın Apache ve IIS için etkin olup olmadığını kontrol etmek için şu anki yöntemim

/**
 * --------------------------------------------------------------
 *  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);

Yerel makinemde çalışıyor ve IIS tabanlı webhost'umda da çalıştı. Ancak, belirli bir apache sunucusunda, apache_get_modules () devre dışı bırakıldığı, ancak mod_rewrite bu sunucuda etkinleştirildiği için Apache için çalışmadı.


3

Kurulu apache modüllerinin bir listesini alabilir ve buna karşı kontrol edebilirsiniz. Belki de .dll (veya linux eşdeğeri) dosyasını arayarak kurulduğunu kontrol edebilirsiniz.


@kba CGI modunda nasıl kontrol edilir.
ravisoni

3

İki satır kod:

$isEnabled = in_array('mod_rewrite', apache_get_modules());
echo ($isEnabled) ? 'Enabled' : 'Not enabled';

1

Bir yöntem daha exec().

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

Yüklü mod_rewriteise çıktıda "rewrite_module" döndürür.


0

Mod yeniden yazma ile ilgili başka bir fikir, gerçekten daha kirli bir hack, sunucuya bir php sorununa ihtiyaç duyulmamasıdır: Neden, olasılıkınız varsa, test.php'yi yeniden yazmak için bir .htaccess koymak için bir test dizini oluşturmuyorsunuz. http ile test.php'ye girdiğiniz beklenen sonucu alıp almadığınızı kontrol edin.

Gerçekten de kirli.


0

Bu işlevi kullanın:

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

0

Bilinen bir dosyaya yönlendirme yapmaya ve ardından bu yönlendirmenin gerçekten curl ile çalışıp çalışmadığını kontrol etmeye ne dersiniz?


0

IIS kahramanları ve kahramanları için:

Mod_rewrite aramanıza gerek yok. Sadece Rewrite 2 modülünü kurun ve .htaccess dosyalarını içe aktarın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.