回答:
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
上記の条件がに評価されるとtrue
、mod_write
有効になります。
phpinfo()
は多くのmod_rewrite
場合に役立ちますが、それが有効になっているか、他の動作にフォールバックするかどうかを使用するシステムを作成する場合は、プログラムでそれを検出すると便利です。
<?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>
私はクリスチャン・ロイの解決策が好きです:
### .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でも機能するかどうかはわかりませんが(チェックする方法はありません)、確率は良好です。
<IfModule mod_env.c>
それはほぼ完璧になります。:)
このコードを含むinfo.phpというファイルをアップロードして実行します。
<?php
phpinfo();
ページでmod_rewriteを検索し、[ロードされたモジュール]の下にあるかどうかを確認します。
あなたが簡単に見つけることができるほど難しくしないでください phpinfo();
お役に立てば幸いです。
ありがとう
<?php
phpinfo();
?>
[ロードされたモジュール]行のapache2handlerの[構成]を確認します。
これはシンプルで機能します。
<?php foreach( apache_get_modules() as $module ) echo "$module<br />"; ?>
これは、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が有効になっています。
インストールされているapacheモジュールのリストを取得し、それを確認できます。おそらく、.dll(またはLinuxの同等の)ファイルを検索して、インストールされているかどうかを確認できます。
によるもう1つの方法exec()
。
exec('/usr/bin/httpd -M | find "rewrite_module"',$output);
場合は、mod_rewrite
それが出力に「rewrite_module」を返しますロードされます。
IISのヒーローとヘロインの場合:
mod_rewriteを探す必要はありません。Rewrite 2モジュールをインストールして、.htaccessファイルをインポートするだけです。
mod_rewrite
は、モジュールがインストールされているかどうかをテストします。IISモッドリライトあなたはおそらくを参照しているモジュールは完全に異なる市販品である-それはApacheのモジュールとの関連を持っていない、それは全く別の問題だと私はそれを使用しての経験がありません。