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

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

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

Итак, я ищу PHP-скрипт, который проверяет mod_rewrite на Apache и 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 на странице и посмотрите, можете ли вы найти ее в разделе Загруженные модули.

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

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

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

благодаря

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

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

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

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

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

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

 /** * -------------------------------------------------------------- * MOD REWRITE CHECK * -------------------------------------------------------------- * - By AH 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 был включен на этом сервере.

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

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

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

Еще один метод через exec() .

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

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

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

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