PHP에서 mod_rewrite가 활성화되어 있는지 확인하는 방법은 무엇입니까?


149

mod_rewrite에서 Apache AND IIS 에서 활성화 되어 있는지 확인할 수 있는지 궁금합니다 PHP.

IIS 용 ModRewrite 가 존재합니다. 확인하십시오 here.

그래서, PHP 스크립트를 찾고 있어요 그것에 대한 검사 mod_rewrite아파치IIS.

누구든지 그러한 스크립트를 알고 있거나 작성할 수 있습니까?

특히 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

경우 위의 조건들을 평가는하기 위해 true, 다음 mod_write을 사용할 수 있습니다.


1
모르겠어요 모듈 mod_rewrite이 설치되어 있는지 테스트합니다 . 아마도 언급하고 있는 IIS Mod-Rewrite 모듈은 완전히 다른 상용 제품입니다. Apache 모듈과 관련이 없으며 완전히 다른 질문이며 사용 경험이 없습니다.
kba

사실입니다. 따라서 일반 스크립트가 제대로 없습니까?
넥타이

@DrCord 그렇다면 CGI에서 사용하고 있다고 생각합니다.
kba

아니, 아래 답변과 같은 PHP 스크립트에서 사용하고있었습니다. if (! function_exists ( 'apache_get_modules')) {phpinfo (); 주사위; } 내 서버에서 항상 사실입니다 ...
DrCord

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에서 알려줍니까?
Owen McAlack 5

2
네, 우리는 phpinfo.php에서 Apche의 "Loaded Modules"를 볼 수 있습니다
Mohini

52

나는 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에서도 작동하는지는 알 수 없지만 (확인할 방법이 없습니다) 확률은 좋습니다.


4
그것으로 <IfModule mod_env.c>그것은 거의 완벽 할 것입니다. :)
RibeiroBreno 1

이것은 매우 유용하고 간단한 솔루션이며 PHP가 CGI로 실행되는 경우에도 작동합니다.
Jose B

@RibeiroBreno가 언급했듯이 <IfModule mod_env.c>에서는 거의 완벽합니다. 이것은 나를 위해 완벽하게 작동했습니다.
Kassem

PHP가 CGI로 실행되고 있다면이 방법이 좋습니다. 아름답게 작동합니다.
Wojciech Jakubas

35

이 코드와 함께 info.php 파일을 업로드하고 실행하십시오.

<?php 
phpinfo();

페이지에서 mod_rewrite를 검색하고 Loaded Modules에서 찾을 수 있는지 확인하십시오.


28

당신이 단순히 찾을 수 있도록 너무 어렵게하지 마십시오 phpinfo();

여기에 이미지 설명을 입력하십시오

도움이 되길 바랍니다.

감사


내가 이미 phpinfo 호출 / 파일로 작업을 수행했기 때문에 이것은 가장 빠르고 간단한 경로였습니다. 감사! :)
Brian U

@loyola, 댓글을 업데이트 할 수 없어 삭제했습니다.
vanduc1102

11

커맨드 라인을 통해 우리는 centOs로 이것을 할 수 있습니다.

httpd -l

1
그리고 당신은 우분투에있는 경우 : 아파치 -l
youanden

2
또는 우분투에서도 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 기반 웹 호스트에서도 작동했습니다. 그러나 특정 아파치 서버에서는 apache_get_modules ()가 비활성화되었지만 해당 서버에서 mod_rewrite가 활성화되어 Apache에서 작동하지 않았습니다.


3

설치된 아파치 모듈 목록을 가져 와서 확인할 수 있습니다 . .dll (또는 linux equivalent) 파일을 검색하여 설치되어 있는지 확인할 수 있습니다.


@kba CGI 모드에서 확인하는 방법.
ravisoni

3

두 줄의 코드 :

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

1

를 통해 한 가지 더 방법 exec().

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

mod_rewrite로드 되면 출력에 "rewrite_module"을 반환합니다.


0

mod rewrite에 관한 또 다른 아이디어는 mod rewrite와 관련하여 서버가 PHP에 필요하지 않은 것에 의존한다는 것입니다. http를 통해 test.php에 넣은 예상 결과를 얻었는지 확인하십시오.

실제로 더럽습니다.


0

이 기능을 사용하십시오 :

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

0

알려진 파일로 리디렉션 한 다음 해당 리디렉션이 실제로 curl에서 작동하는지 확인하는 방법은 무엇입니까?


0

IIS 영웅 및 헤로인의 경우 :

mod_rewrite를 찾을 필요가 없습니다. Rewrite 2 모듈을 설치 한 다음 .htaccess 파일 을 가져 오기만하면 됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.