我想知道是否可以检查 mod_rewrite
Apache 和 IIS 是否启用PHP
>
ModRewrite 。检查here
。
所以,我正在寻找一个PHP脚本来检查 Apache 和 IIS上的mod_rewrite
。
有人知道这样的剧本还是可以写一个?
特别是对于Microsoft IIS 。
谢谢!
答案 0 :(得分:124)
如果您使用的是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
已启用。
答案 1 :(得分:91)
<?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>
答案 2 :(得分:51)
### .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(我无法检查),但可能性很大。
答案 3 :(得分:34)
使用此代码上传名为info.php的文件并运行它:
<?php
phpinfo();
在页面上搜索mod_rewrite,看看是否可以在Loaded Modules下找到它。
答案 4 :(得分:26)
不要让你很难在phpinfo();
希望有帮助!
由于
答案 5 :(得分:10)
通过命令行我们在centOs中可以做到这一点
httpd -l
答案 6 :(得分:7)
<?php
phpinfo();
?>
在“已加载模块”行的apache2handler中查看“配置”。
这很简单且有效。
<?php foreach( apache_get_modules() as $module ) echo "$module<br />"; ?>
答案 7 :(得分:6)
这是我目前检查是否为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的webhost中运行。但是,在特定的apache服务器上,它不适用于Apache,因为apache_get_modules()已被禁用,但mod_rewrite已在该服务器中启用。
答案 8 :(得分:3)
您可以获取已安装apache modules的列表,然后再对此进行检查。也许你可以通过搜索它的.dll(或linux等效文件)来检查它是否已安装。
答案 9 :(得分:3)
两行代码:
$isEnabled = in_array('mod_rewrite', apache_get_modules());
echo ($isEnabled) ? 'Enabled' : 'Not enabled';
答案 10 :(得分:1)
通过exec()
的另一种方法。
exec('/usr/bin/httpd -M | find "rewrite_module"',$output);
如果加载了mod_rewrite
,它将在输出中返回“rewrite_module”。
答案 11 :(得分:0)
关于mod重写的另一个想法,实际上更多是一个肮脏的黑客是服务器dependend一个不必要的PHP问题: 为什么不,如果你有可能性,创建一个测试目录,将.htaccess重写为test.php,通过http调用目录,检查你是否得到了你在test.php中的预期结果。
确实,很脏。
答案 12 :(得分:0)
使用此功能:
function apache_module_exists($module)
{
return in_array($module, apache_get_modules());
}
答案 13 :(得分:0)
如何重定向到已知文件,然后检查该重定向是否确实适用于curl?
答案 14 :(得分:0)
对于IIS英雄和海洛因:
无需寻找mod_rewrite。 只需安装 Rewrite 2 模块,然后导入 .htaccess 文件。
答案 15 :(得分:0)
实际上,仅由于加载了模块,并不一定意味着已在放置.htaccess的目录中启用了指令。您可能需要知道的是:重写有效吗?唯一可以确定的方法是进行实际测试:将一些测试文件放在服务器上,然后使用HTTP请求。
好消息:我创建a library就是为了做到这一点(检测各种.htaccess功能)。使用此库,您所需要做的就是:
require 'vendor/autoload.php';
use HtaccessCapabilityTester\HtaccessCapabilityTester;
$hct = new HtaccessCapabilityTester($baseDir, $baseUrl);
if ($hct->rewriteWorks()) {
// rewriting works
}
(而不是$ baseDir和$ baseUrl,您必须提供要放置测试文件的路径以及可以到达它们的相应URL)
如果只想知道模块是否已加载,则可以执行以下操作:
if ($hct->moduleLoaded('rewrite')) {
// mod_rewrite is loaded (tested in a real .htaccess by using the "IfModule" directive)
}
该库位于此处:https://github.com/rosell-dk/htaccess-capability-tester