我想知道是否有可能在PHP
中检查Apache和IIS上是否启用了mod_rewrite
。
ModRewrite适用于IIS。 在这里
进行检查。
因此,我正在寻找一个检查 Apache 和 IIS 上的 mod_rewrite
的PHP脚本。
有人知道这样的脚本或可以编写一个吗? 特别是适用于Microsoft IIS 。
谢谢!
我想知道是否有可能在PHP
中检查Apache和IIS上是否启用了mod_rewrite
。
ModRewrite适用于IIS。 在这里
进行检查。
因此,我正在寻找一个检查 Apache 和 IIS 上的 mod_rewrite
的PHP脚本。
有人知道这样的脚本或可以编写一个吗? 特别是适用于Microsoft IIS 。
谢谢!
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(我无法检查),但可能性很大。
<IfModule mod_env.c>
的话,就几乎完美了。 :) - RibeiroBreno上传一个名为info.php的文件,并使用以下代码运行:
<?php
phpinfo();
在页面上搜索 mod_rewrite,并查看是否可以在已加载的模块下找到它。
不要让它变得太困难了,你可以在 phpinfo();
中简单查找。
希望有所帮助!
谢谢
通过命令行,我们可以在CentOS上执行此操作。
httpd -l
<?php
phpinfo();
?>
<?php foreach( apache_get_modules() as $module ) echo "$module<br />"; ?>
这是我目前检查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的Web主机上工作。然而,在特定的Apache服务器上,它无法正常工作,因为apache_get_modules()被禁用了,但该服务器启用了mod_rewrite。
两行代码:
$isEnabled = in_array('mod_rewrite', apache_get_modules());
echo ($isEnabled) ? 'Enabled' : 'Not enabled';
mod_rewrite
是否已安装。你可能指的是_IIS Mod-Rewrite_模块,它是完全不同的商业产品 - 它与Apache模块没有任何关联,这是一个完全不同的问题,我没有使用它的经验。 - kbaphpinfo()
可以用于许多事情,但如果您想编写一个系统,该系统使用mod_rewrite
(如果启用)或者回退到其他行为,则通过编程检测它可能会很有用。 - kbastrpos(shell_exec('/usr/local/apache/bin/apachectl -l'), 'mod_rewrite') !== false
,但出现了-bash: syntax error near unexpected token 'shell_exec'
的错误。 - Kangarooo