Как проверить, включен ли mod_rewrite в php?

Мне было интересно, можно ли проверить, включен ли mod_rewrite в Apache И IIS в PHP.. p >

ModRewrite для IIS существует. Проверьте here.

Итак, я ищу PHP script, который проверяет mod_rewrite на Apache и IIS.

Кто-нибудь знает такой script или может написать один?

Специально для Microsoft IIS.

Спасибо!

Ответ 1

Если вы используете 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 разрешено.

Ответ 2

Скопируйте этот фрагмент кода и запустите его, чтобы узнать.


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

Ответ 3

Мне нравится решение 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

Загрузите файл с именем info.php с этим кодом и запустите его:

<?php 
phpinfo();

Найдите mod_rewrite на странице и посмотрите, можете ли вы найти его в разделе Загруженные модули.

Ответ 5

не делайте это так сложно, вы можете просто найти в phpinfo();

enter image description here

Надеюсь, что это полезно!

Спасибо

Ответ 6

через командную строку мы в centO можем сделать это

httpd -l

Ответ 7

<?php
phpinfo();
?>

Посмотрите в разделе Конфигурация в apache2handler в строке Loaded Modules.

Это просто и работает.

<?php foreach( apache_get_modules() as $module ) echo "$module<br />";  ?>

Ответ 8

Это мой текущий метод проверки того, включен ли Mod_rewrite для Apache и IIS

/**
 * --------------------------------------------------------------
 *  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, поскольку apache_get_modules() был отключен, но mod_rewrite был включен на этом сервере.

Ответ 9

Вы можете получить список установленных модулей apache и проверить на это. Возможно, вы можете проверить, установлен ли его, выполнив поиск его .dll(или эквивалентного linux файла).

Ответ 10

Две строки кода:

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

Ответ 11

Еще один метод с помощью exec().

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

Если загружен mod_rewrite, он вернет "rewrite_module" на выходе.

Ответ 12

Еще одна идея, а тем более грязный взлом, касающийся перезаписи мод, зависит от сервера, не требующего проблемы с php: Почему бы и нет, если у вас есть возможность, создайте тестовый каталог, поставьте .htaccess в его переписывание на test.php, вызовите каталог через http и проверьте, получите ли вы ожидаемый результат, который вы положили в test.php.

Действительно, грязный.