如何检查是否在PHP中启用mod_rewrite?

我想知道是否有可能检查mod_rewrite是否在PHPApacheIIS上启用。

用于IIS的ModRewrite存在。 here检查。

所以,我正在寻找一个PHP脚本来检查ApacheIIS上的mod_rewrite

有谁知道这样的脚本或可以写一个?

尤其是对于Microsoft IIS

谢谢!

如果你使用mod_php,你可以使用apache_get_modules() 。 这将返回一个所有启用模块的数组,所以要检查是否启用了mod_rewrite ,你可以简单地做

 in_array('mod_rewrite', apache_get_modules()); 

不幸的是,你很可能试图用CGI来做这件事,这会让它更加困难。

不过,您可以使用以下方法对其进行testing

 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的解决scheme :

 ### .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(); 

search页面上的mod_rewrite,看看你是否可以在加载模块下find它。

不要让它变得如此困难,你可以简单地在phpinfo();find它phpinfo();

在这里输入图像描述

希望有帮助!

谢谢

通过命令行,我们可以做到这一点

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

在加载的模块行中的apache2handler中查看configuration。

这很简单,有效。

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

这是我目前检查是否为Apache和IIS启用Mod_rewrite的方法

 /** * -------------------------------------------------------------- * 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的networking主机工作。 但是,在一个特定的apache服务器上,它没有为Apache工作,因为禁用了apache_get_modules(),但是在该服务器中启用了mod_rewrite。

你可以得到一个已安装的apache模块列表,然后检查。 也许你可以通过search它的.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”。

关于mod rewrite的另一个想法,实际上更肮脏的黑客,是服务器依赖一个没有必要的PHP问题:为什么不,如果你有可能性,创build一个testing目录把一个.htaccess重写到test.php,调用目录通过http,并检查你是否得到了你在test.php中的预期结果。

确实很脏。