Мне было интересно, можно ли проверить, включен ли mod_rewrite
в Apache И IIS в PHP
.. p >
ModRewrite для IIS существует. Проверьте here
.
Итак, я ищу PHP script, который проверяет mod_rewrite
на Apache и IIS.
Кто-нибудь знает такой script или может написать один?
Специально для 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>
Мне нравится решение 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 (я не могу проверить), но шансы хорошие.
<IfModule mod_env.c>
это было бы почти идеально. :)
Загрузите файл с именем 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 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 был включен на этом сервере.
Две строки кода:
$isEnabled = in_array('mod_rewrite', apache_get_modules());
echo ($isEnabled) ? 'Enabled' : 'Not enabled';
Вы можете получить список установленных модулей apache и проверить на это. Возможно, вы можете проверить, установлен ли его, выполнив поиск его .dll(или эквивалентного linux файла).
Еще один метод с помощью exec()
.
exec('/usr/bin/httpd -M | find "rewrite_module"',$output);
Если загружен mod_rewrite
, он вернет "rewrite_module" на выходе.
Еще одна идея, а тем более грязный взлом, касающийся перезаписи мод, зависит от сервера, не требующего проблемы с php: Почему бы и нет, если у вас есть возможность, создайте тестовый каталог, поставьте .htaccess в его переписывание на test.php, вызовите каталог через http и проверьте, получите ли вы ожидаемый результат, который вы положили в test.php.
Действительно, грязный.
mod_rewrite
. Модуль IIS Mod-Rewrite, на который вы, вероятно, ссылаетесь, является совершенно другим и коммерческим продуктом - он не связан с модулем Apache, это совершенно другой вопрос, и у меня нет опыта его использования.