PHPでmod_rewriteが有効になっているかどうかを確認する方法


149

ApacheIISでmod_rewriteが有効になっているかどうかを確認できるかどうか疑問に思っていましたでましたPHP

IISのModRewriteが存在します。チェックしてhere

だから、私はのためにチェックしていることPHPスクリプトを探していますmod_rewriteのApacheIIS。

誰かがそのようなスクリプトを知っているか、それを書くことができますか?

特にMicrosoft IISの場合

ありがとう!

回答:


125

mod_phpを使用している場合は、を使用できますapache_get_modules()。これにより、すべての有効なモジュールの配列が返されるので、mod_rewrite有効かどうかを確認するには、次のようにします。

in_array('mod_rewrite', apache_get_modules());

残念ながら、これをCGIで実行しようとしている可能性が高いため、少し難しくなります。

ただし、次の方法でテストできます。

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

上記の条件がに評価されるとtruemod_write有効になります。


1
知りません。これmod_rewriteは、モジュールがインストールされているかどうかをテストします。IISモッドリライトあなたはおそらくを参照しているモジュールは完全に異なる市販品である-それはApacheのモジュールとの関連を持っていない、それは全く別の問題だと私はそれを使用しての経験がありません。
kba

それは本当なので、適切な一般的なスクリプトはありませんか?
タイ

@DrCordそれでは、CGIで使用していると思います。
kba 2013

いいえ、答えと以下の答えのように、それをphpスクリプトで使用していました。if(!function_exists( 'apache_get_modules')){phpinfo(); 死ぬ; 私のサーバーでは常にtrueです...
DrCord 2013

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からも通知されますか?
オーウェンマッカラック2013

2
はい、phpinfo.phpですべてのApcheの「ロードされたモジュール」を見ることができます
Mohini

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 14

これは非常に便利でシンプルなソリューションであり、PHPがCGIとして実行されている場合でも機能します
Jose B

@RibeiroBrenoが述べたように、<IfModule mod_env.c>を使用すると、ほぼ完璧です。これは完璧に機能しました。
カッセム

PHPがCGIとして実行されている場合、これが適切な方法です。美しく動作します。
Wojciech Jakubas

35

このコードを含むinfo.phpというファイルをアップロードして実行します。

<?php 
phpinfo();

ページでmod_rewriteを検索し、[ロードされたモジュール]の下にあるかどうかを確認します。


28

あなたが簡単に見つけることができるほど難しくしないでください phpinfo();

ここに画像の説明を入力してください

お役に立てば幸いです。

ありがとう


これは、phpinfoの呼び出し/ファイルを使用してすでに作業を行っていたため、私にとって最も速くて簡単なルートでした。ありがとう!:)
ブライアンU

@loyola、コメントを更新できないため、削除しました。ありがとう
vanduc1102

11

コマンドラインを使用して、centOsでこれを行うことができます

httpd -l

1
そして、あなたがubuntuにいる場合:apache2 -l
youanden

2
または、Ubuntuのapachectl -M
Batandwa

これは、中にコンパイルされたモジュールのみを示しているようだ。
jayarjo

2
httpd -Mは、ロードされた静的モジュールと共有モジュールのリストを表示します。
jayarjo

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ベースのWebホストでも動作しました。ただし、特定のapacheサーバーでは、apache_get_modules()が無効になっているため、Apacheでは機能しませんでしたが、そのサーバーではmod_rewriteが有効になっています。


3

インストールされているapacheモジュールのリストを取得し、それを確認できます。おそらく、.dll(またはLinuxの同等の)ファイルを検索して、インストールされているかどうかを確認できます。


@kba CGIモードでそのときの確認方法。
ravisoni 2013

3

2行のコード:

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


0

modの書き換えに関するもう1つのアイデアは、実際にはもっと汚いハックです。サーバーに依存する必要はありませんが、phpの問題です。可能であれば、テストディレクトリを作成し、そこに.htaccessを入れてtest.phpに書き換え、ディレクトリを呼び出します。 http経由で、test.phpに入力した期待どおりの結果が得られるかどうかを確認します。

確かに、汚い。


0

この関数を使用します。

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

0

既知のファイルにリダイレクトし、そのリダイレクトが実際にcurlで機能するかどうかを確認してみませんか?


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.