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

148

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

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

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

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

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

Спасибо!

Теги:
iis
mod-rewrite

12 ответов

111
Лучший ответ

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

  • 0
    А что будет работать в IIS?
  • 1
    Я не знаю. Это проверяет, установлен ли модуль mod_rewrite . Модуль IIS Mod-Rewrite, на который вы, вероятно, ссылаетесь, является совершенно другим и коммерческим продуктом - он не связан с модулем Apache, это совершенно другой вопрос, и у меня нет опыта его использования.
Показать ещё 13 комментариев
91

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


<?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>
  • 0
    Phpinfo также скажет мне, если у меня не включен mod_php?
  • 2
    да, мы можем видеть в phpinfo.php все загруженные модули Apche
46

Мне нравится решение 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 (я не могу проверить), но шансы хорошие.

  • 3
    @ale 500 Внутренняя ошибка сервера после включения .htaccess.
  • 4
    С <IfModule mod_env.c> это было бы почти идеально. :)
Показать ещё 4 комментария
32

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

<?php 
phpinfo();

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

  • 1
    Как насчет IIS?
25

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

Изображение 6196

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

Спасибо

  • 0
    Это был самый быстрый и простой маршрут для меня, так как я уже делал что-то с вызовом / файлом phpinfo. Спасибо! :)
  • 0
    @loyola, я не могу обновить свой комментарий, поэтому я удалил, спасибо
9

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

httpd -l
  • 1
    И если вы находитесь на Ubuntu: apache2 -l
  • 1
    Или apachectl -M в Ubuntu, а также
Показать ещё 2 комментария
7
<?php
phpinfo();
?>

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

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

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

Это мой текущий метод проверки того, включен ли 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 был включен на этом сервере.

3

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

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

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

  • 5
    Это не работает в CGI.
  • 0
    @kba Как проверить потом в режиме CGI.
Показать ещё 1 комментарий
1

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

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

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

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню