Bagaimana cara memeriksa apakah mod_rewrite diaktifkan di php?


149

Saya bertanya-tanya apakah mungkin untuk memeriksa apakah mod_rewritediaktifkan pada Apache DAN IIS di PHP.

ModRewrite untuk IIS ada. Lihat itu here.

Jadi, saya sedang mencari script PHP yang memeriksa mod_rewritepada Apache dan IIS.

Adakah yang tahu skrip seperti itu atau dapat menulisnya?

Khusus untuk Microsoft IIS .

Terima kasih!

Jawaban:


125

Jika Anda menggunakan mod_php, Anda dapat menggunakan apache_get_modules(). Ini akan mengembalikan array dari semua modul yang diaktifkan, jadi untuk memeriksa apakah mod_rewritediaktifkan, Anda bisa melakukannya

in_array('mod_rewrite', apache_get_modules());

Sayangnya, Anda kemungkinan besar mencoba melakukan ini dengan CGI, yang membuatnya sedikit lebih sulit.

Anda dapat mengujinya menggunakan yang berikut ini

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

Jika kondisi di atas dievaluasi true, maka mod_writediaktifkan.


1
Saya tidak tahu Ini menguji apakah modul mod_rewriteterpasang. The IIS Mod-Rewrite modul Anda mungkin maksudkan adalah produk yang sama sekali berbeda dan komersial - tidak memiliki hubungan dengan modul Apache, itu pertanyaan yang sama sekali berbeda dan saya tidak punya pengalaman menggunakannya.
kba

Itu benar, jadi tidak ada script umum yang benar?
Dasi

@DrCord Lalu saya kira Anda menggunakannya di CGI.
kba

tidak, menggunakannya dalam skrip php seperti jawaban dan jawaban di bawah ini. if (! function_exists ('apache_get_modules')) {phpinfo (); mati; } selalu benar di server saya ...
DrCord

2
@Gerep phpinfo()dapat berguna untuk banyak hal, tetapi jika Anda ingin menulis sistem yang digunakan mod_rewritejika itu diaktifkan atau mundur ke beberapa perilaku lain, akan berguna untuk mendeteksinya secara terprogram.
kba

94

Salin bagian kode ini dan jalankan untuk mencari tahu.


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

Akankah phpinfo juga memberi tahu saya jika saya tidak mengaktifkan mod_php?
Owen McAlack

2
ya kita bisa lihat di phpinfo.php semua "Modul yang Dimuat" Apche
Mohini

52

Saya suka solusi Christian Roy :

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

Kemudian, Anda dapat memeriksa kode PHP Anda untuk

    array_key_exists('HTTP_MOD_REWRITE', $_SERVER);

Tidak tahu apakah ini bekerja juga dengan IIS (saya tidak punya cara untuk memeriksa) tetapi kemungkinannya bagus.


4
Dengan <IfModule mod_env.c>itu akan hampir sempurna. :)
RibeiroBreno

Ini adalah solusi yang sangat berguna dan sederhana dan bekerja bahkan jika PHP berjalan sebagai CGI
Jose B

seperti yang disebutkan @RibeiroBreno, dengan <IfModule mod_env.c> akan hampir sempurna. ini bekerja untuk saya dengan sempurna.
Kassem

Jika PHP berjalan sebagai CGI, inilah caranya. Bekerja dengan indah.
Wojciech Jakubas

35

Unggah file bernama info.php dengan kode ini dan jalankan:

<?php 
phpinfo();

Cari mod_rewrite pada halaman, dan lihat apakah Anda dapat menemukannya di bawah Modul Dimuat.


28

jangan membuatnya begitu sulit sehingga Anda bisa menemukannya phpinfo();

masukkan deskripsi gambar di sini

Semoga bermanfaat!

Terima kasih


Ini adalah rute tercepat dan paling sederhana bagi saya, karena saya sudah melakukan hal-hal dengan panggilan / file phpinfo. Terima kasih! :)
Brian U

@loyola, saya tidak dapat memperbarui komentar saya, jadi saya menghapus, terima kasih
vanduc1102

11

via command line kita dalam centOs kita bisa melakukan ini

httpd -l

1
Dan jika Anda berada di ubuntu: apache2 -l
youanden

2
Atau apachectl -M di Ubuntu juga
Batandwa

Ini sepertinya hanya memperlihatkan modul yang dikompilasi masuk.
jayarjo

2
httpd -M menunjukkan daftar modul Statis dan Bersama yang dimuat.
jayarjo

7
<?php
phpinfo();
?>

Lihat di bawah Konfigurasi di apache2handler di baris Modul Dimuat.

Ini sederhana dan berhasil.

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

7

Ini adalah metode saya saat ini untuk memeriksa apakah Mod_rewrite diaktifkan untuk Apache dan IIS

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

Ini bekerja di mesin lokal saya dan juga bekerja di hosting berbasis IIS saya. Namun, pada server apache tertentu, itu tidak berfungsi untuk Apache karena apache_get_modules () dinonaktifkan tetapi mod_rewrite diaktifkan di server itu.


3

Anda bisa mendapatkan daftar modul apache yang terpasang , dan memeriksanya. Mungkin Anda dapat memeriksa apakah sudah diinstal dengan mencari file .dll (atau yang setara dengan linux).


@kba Cara memeriksa lalu dalam mode CGI.
ravisoni

3

Dua baris kode:

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

1

Satu lagi metode melalui exec().

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

Jika mod_rewritedimuat itu akan mengembalikan "rewrite_module" di output.


0

Gagasan lain, memang lebih merupakan hack kotor, mengenai mod rewrite adalah server dependend dan tidak perlu masalah php: Mengapa tidak, jika Anda memiliki kemungkinan, buat direktori uji letakkan .htaccess di dalamnya penulisan ulang untuk test.php, panggil direktori via http dan periksa apakah Anda mendapatkan hasil yang diharapkan Anda masukkan ke test.php.

Memang kotor.


0

Gunakan fungsi ini:

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

0

Bagaimana kalau membuat redirect ke file yang dikenal dan kemudian memeriksa apakah redirect itu benar-benar berfungsi dengan curl?


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.