Як перевірити, чи включений mod_rewrite у php?


149

Мені було цікаво, чи можна перевірити, чи mod_rewriteввімкнено Apache AND IIS в?PHP ?

ModRewrite для IIS існує. Перевірте це here.

Отже, я шукаю скрипт PHP , який перевіряє mod_rewriteна Apache і 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>

Чи скаже мені phpinfo, якщо я не ввімкнув mod_php?
Оуен МакАлак

2
да ми можемо бачити в phpinfo.php все Apche в «Loaded Modules»
Мохіні

52

Мені подобається рішення Крістіана Роя :

###  .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

Це дуже корисне і просте рішення, і воно працює, навіть якщо PHP працює як CGI
Хосе B

як згадував @RibeiroBreno, з <IfModule mod_env.c> це було б майже ідеально. це працювало для мене чудово.
Кассем

Якщо PHP працює як CGI, це шлях. Працює прекрасно.
Войцех Якубас

35

Завантажте файл з назвою info.php з цим кодом і запустіть його:

<?php 
phpinfo();

Знайдіть mod_rewrite на сторінці та перевірте, чи зможете ви знайти її в розділі Завантажені модулі.


28

не робити це так складно, що ви можете просто знайти phpinfo();

введіть тут опис зображення

Сподіваюся, корисна!

Дякую


Це був найшвидший і найпростіший маршрут для мене, оскільки я вже робив матеріали з викликом / файлом phpinfo. Дякую! :)
Брайан U

@loyola, я не можу оновити коментар, тому я видалив, дякую
vanduc1102

11

за допомогою командного рядка ми в центО, ми можемо це зробити

httpd -l

1
А якщо ви перебуваєте на ubuntu: apache2 -l
youanden

2
Або apachectl -M в Ubuntu також
Batandwa

Здається, це показують лише модулі, які були складені.
jayarjo

2
httpd -M показує список завантажених статичних та загальних модулів.
jayarjo

7
<?php
phpinfo();
?>

Подивіться в розділі Конфігурація в апаш2хандлері в рядку Завантажені модулі.

Це просто і працює.

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

7

Це мій поточний метод перевірки, чи увімкнено 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

Ви можете отримати список встановлених модулів apache та перевірити їх. Можливо, ви можете перевірити, чи встановлено його, шукаючи його .dll (або еквівалент Linux).


@kba Як перевірити наявність у режимі CGI.
ravisoni


1

Ще один метод наскрізь exec().

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

Якщо mod_rewriteвін завантажений, він поверне "rewrite_module" у висновку.


0

Інша ідея, справді більш брудна хак, що стосується переписування моди - це сервер залежно від не потрібної проблеми php: Чому б ні, якщо у вас є можливість, створити тестовий каталог, поставити в нього .htaccess, переписуючи на test.php, зателефонуйте в каталог через http і перевірте, чи отримаєте ви очікуваний результат, який ви поставите в test.php.

Дійсно, брудне.


0

Використовуйте цю функцію:

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

0

Як щодо перенаправлення на відомий файл, а потім перевірки, чи справді перенаправлення працює з завитком?


0

Для героїв та героїнів IIS:

Не потрібно шукати mod_rewrite. Просто встановіть модуль Rewrite 2, а потім імпортуйте файли .htaccess .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.