mod_rewrite
がApacheANDIISで有効になっているかどうかをチェックすることが可能かどうか疑問に思いました)PHP
。
IISのModRewriteが存在します。確認してください here
。
それで、私はApacheとIISでmod_rewrite
をチェックするPHPスクリプトを探しています。
誰かがそのようなスクリプトを知っているか、またはそれを書くことができますか?
特にMicrosoftIISの場合。
ありがとうございます。
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
が有効になります。
<?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>
私は好きです 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>
次に、あなたのPHPコードをチェックインします。
array_key_exists('HTTP_MOD_REWRITE', $_SERVER);
これがIISでも動作するかどうかはわかりません(確認する方法がありません)が、オッズは良好です。
このコードでinfo.phpというファイルをアップロードして実行します。
<?php
phpinfo();
ページでmod_rewriteを検索し、それがLoaded Modulesの下にあるかどうかを確認します。
それをそれほど難しくしないでください、あなたは単にphpinfo();
で見つけることができます
役に立ちましたか?
ありがとう
コマンドラインを介して、私たちはcentosでこれを行うことができます
httpd -l
<?php
phpinfo();
?>
Apache2handlerのLoaded Modules行のConfigurationの下を見てください。
これは簡単でうまくいきます。
<?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ベースのウェブホストでも動作しました。ただし、特定のApacheサーバーでは、Apache_get_modules()が無効になっていてもmod_rewriteが有効になっているため、Apacheでは機能しませんでした。
インストール済みのリスト Apacheモジュール を入手して、それを確認してください。おそらく、その.dll(またはそれに相当するもの)ファイルを検索して、インストールされているかどうかを確認できます。
2行のコード
$isEnabled = in_array('mod_rewrite', Apache_get_modules());
echo ($isEnabled) ? 'Enabled' : 'Not enabled';
exec()
によるもう1つの方法。
exec('/usr/bin/httpd -M | find "rewrite_module"',$output);
mod_rewrite
がロードされると、出力に "rewrite_module"を返します。
この機能を使う:
function Apache_module_exists($module)
{
return in_array($module, Apache_get_modules());
}
既知のファイルにリダイレクトして、そのリダイレクトが実際にcurlで機能するかどうかをチェックするのはどうですか。
Mod rewriteに関するもう1つの考え、実際にはもっと汚いハックは、サーバーに依存する必要のないphpの問題です。 http経由であなたがtest.phpに入れた期待される結果を得たかどうか確認しなさい。
確かに、汚れています。