source

mod_rewrite가 php에서 활성화 되어 있는지 확인하는 방법

gigabyte 2022. 9. 11. 17:25
반응형

mod_rewrite가 php에서 활성화 되어 있는지 확인하는 방법

혹시 확인 가능한지 궁금합니다.mod_rewrite는 의 Apache AND IIS에서 활성화됩니다.

IIS용 ModRewrite가 존재합니다.체크해 주세요.

그래서, 나는 다음을 체크하는 PHP 스크립트를 찾고 있다.mod_rewriteApache IIS에서 사용할 수 있습니다.

그런 대본을 아는 사람, 쓸 줄 아는 사람?

특히 Microsoft IIS의 경우.

감사합니다!

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>

크리스찬 로이의 솔루션이 마음에 들어요

###  .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();

여기에 이미지 설명 입력

도움이 되길 바랍니다!

감사합니다.

명령줄을 통해 우리는 centO에서 이것을 할 수 있습니다.

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

[ Loaded Modules ]행의 apache2handler의 [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(또는 Linux와 동등한) 파일을 검색하여 설치 여부를 확인할 수 있습니다.

두 줄의 코드:

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

mod rewrite에 관한 또 다른 아이디어는 서버가 필요하지 않은 php 문제에 의존한다는 것입니다.가능성이 있는 경우 test.php에 .htaccess를 test.php에 다시 쓰는 테스트 디렉토리를 만들고 http를 통해 디렉토리를 호출하여 test.php에 입력한 예상 결과를 얻을 수 있는지 확인합니다.

정말 더럽다.

~를 통해 한 가지 방법이 더 있습니다.

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

ifmod_rewrite로딩되면 출력에 "syslog_syslog"가 반환됩니다.

다음 기능을 사용합니다.

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

IIS 영웅 및 영웅의 경우:

mod_rewrite를 찾을 필요가 없습니다.Rewrite 2 모듈을 설치하고 .htaccess 파일을 Import합니다.

실제로 모듈이 로드되었다고 해서 .htaccess를 배치하는 디렉토리에서 반드시 디렉티브가 유효하게 되어 있는 것은 아닙니다.필요한 것은 다음과 같습니다.다시 쓰기는 가능합니까?확실히 알 수 있는 유일한 방법은 실제 테스트를 수행하는 것입니다.서버에 몇 가지 테스트파일을 저장하고 HTTP로 요구합니다.

좋은 소식:이 작업을 수행하기 위해 라이브러리를 만들었습니다(다양한 .htaccess 기능을 검출).이 라이브러리를 사용하면 다음 작업만 수행할 수 있습니다.

require 'vendor/autoload.php';
use HtaccessCapabilityTester\HtaccessCapabilityTester;

$hct = new HtaccessCapabilityTester($baseDir, $baseUrl);
if ($hct->rewriteWorks()) {    
    // rewriting works
}

($baseDir 및 $baseUrl 대신 테스트파일을 저장할 경로와 도달 가능한 URL을 지정해야 합니다.)

모듈이 로딩되어 있는지 알고 싶을 경우 다음을 수행할 수 있습니다.

if ($hct->moduleLoaded('rewrite')) {    
    // mod_rewrite is loaded (tested in a real .htaccess by using the "IfModule" directive)
}

라이브러리는 https://github.com/rosell-dk/htaccess-capability-tester 에서 이용하실 수 있습니다.

언급URL : https://stackoverflow.com/questions/9021425/how-to-check-if-mod-rewrite-is-enabled-in-php

반응형