web-dev-qa-db-ja.com

mod_rewriteがphpで有効になっているかどうかを確認するにはどうすればいいですか?

mod_rewriteApacheANDIIS有効になっているかどうかをチェックすることが可能かどうか疑問に思いました)PHP

IISのModRewriteが存在します。確認してください here

それで、私はApacheIISでmod_rewriteをチェックするPHPスクリプトを探しています。

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

特にMicrosoftIISの場合。

ありがとうございます。

148
TV productions

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が有効になります。

124
kba

このコードをコピーして実行してください。


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

私は好きです 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でも動作するかどうかはわかりません(確認する方法がありません)が、オッズは良好です。

51
a.l.e

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

<?php 
phpinfo();

ページでmod_rewriteを検索し、それがLoaded Modulesの下にあるかどうかを確認します。

34
Johnny Jensen

それをそれほど難しくしないでください、あなたは単にphpinfo();で見つけることができます

enter image description here

役に立ちましたか?

ありがとう

26
loyola

コマンドラインを介して、私たちはcentosでこれを行うことができます

httpd -l
10
h0mayun
<?php
phpinfo();
?>

Apache2handlerのLoaded Modules行のConfigurationの下を見てください。

これは簡単でうまくいきます。

<?php foreach( Apache_get_modules() as $module ) echo "$module<br />";  ?>
7
user1649798

これは、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では機能しませんでした。

6

インストール済みのリスト Apacheモジュール を入手して、それを確認してください。おそらく、その.dll(またはそれに相当するもの)ファイルを検索して、インストールされているかどうかを確認できます。

3
TJHeuvel

2行のコード

$isEnabled = in_array('mod_rewrite', Apache_get_modules());
echo ($isEnabled) ? 'Enabled' : 'Not enabled';
3
Amal Murali

exec() によるもう1つの方法。

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

mod_rewriteがロードされると、出力に "rewrite_module"を返します。

1
Abhishek Gurjar

この機能を使う:

function Apache_module_exists($module)
{
    return in_array($module, Apache_get_modules());
}
0
Black

既知のファイルにリダイレクトして、そのリダイレクトが実際にcurlで機能するかどうかをチェックするのはどうですか。

0
rosell.dk

Mod rewriteに関するもう1つの考え、実際にはもっと汚いハックは、サーバーに依存する必要のないphpの問題です。 http経由であなたがtest.phpに入れた期待される結果を得たかどうか確認しなさい。

確かに、汚れています。

0
webfan