如何检查是否在PHP中启用mod_rewrite?
我想知道是否有可能检查mod_rewrite
是否在PHP
和Apache和IIS上启用。
用于IIS的ModRewrite存在。 here
检查。
所以,我正在寻找一个PHP脚本来检查Apache和IIS上的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中的预期结果。
确实很脏。