답변:
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>
나는 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에서도 작동하는지는 알 수 없지만 (확인할 방법이 없습니다) 확률은 좋습니다.
<IfModule mod_env.c>
그것은 거의 완벽 할 것입니다. :)
당신이 단순히 찾을 수 있도록 너무 어렵게하지 마십시오 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 기반 웹 호스트에서도 작동했습니다. 그러나 특정 아파치 서버에서는 apache_get_modules ()가 비활성화되었지만 해당 서버에서 mod_rewrite가 활성화되어 Apache에서 작동하지 않았습니다.
를 통해 한 가지 더 방법 exec()
.
exec('/usr/bin/httpd -M | find "rewrite_module"',$output);
mod_rewrite
로드 되면 출력에 "rewrite_module"을 반환합니다.
mod_rewrite
이 설치되어 있는지 테스트합니다 . 아마도 언급하고 있는 IIS Mod-Rewrite 모듈은 완전히 다른 상용 제품입니다. Apache 모듈과 관련이 없으며 완전히 다른 질문이며 사용 경험이 없습니다.