Мне было интересно, можно ли проверить, включен ли 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.
Действительно, грязный.