Answers:
如果您使用的是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
启用。
phpinfo()
在许多事情上都很有用,但是如果您想编写一个mod_rewrite
启用了它或使用其他方式回退到其他行为的系统,则以编程方式检测它会很有用。
<?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(我无法检查),但可能性很大。
<IfModule mod_env.c>
它将几乎是完美的。:)
别那么困难,您只需在 phpinfo();
希望对您有所帮助!
谢谢
通过命令行,我们可以在centOs中执行此操作
httpd -l
这是我当前的检查Apache和IIS是否都启用Mod_rewrite的方法
/**
* --------------------------------------------------------------
* 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';
通过另一种方法exec()
。
exec('/usr/bin/httpd -M | find "rewrite_module"',$output);
如果mod_rewrite
已加载,它将在输出中返回“ rewrite_module”。
对于IIS英雄和海洛因:
无需寻找mod_rewrite。只需安装Rewrite 2模块,然后导入.htaccess文件。
mod_rewrite
已安装模块。您可能引用的IIS Mod-Rewrite模块是完全不同的商业产品-它与Apache模块没有关联,这是一个完全不同的问题,我没有使用它的经验。