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

152

我想知道是否有可能在PHP中检查ApacheIIS上是否启用了mod_rewrite

ModRewrite适用于IIS。 在这里进行检查。

因此,我正在寻找一个检查 Apache IIS 上的 mod_rewrite 的PHP脚本。

有人知道这样的脚本或可以编写一个吗? 特别是适用于Microsoft IIS

谢谢!

15个回答

1
另一个想法,确实更像是一种肮脏的黑客技巧,涉及到 mod rewrite 是服务器相关的问题,而不是必须要使用 PHP 的问题: 如果你有可能的话,为什么不创建一个测试目录,在其中放置一个 .htaccess 文件,将其重写为 test.php,并通过 http 调用该目录,检查是否得到了预期结果。确实很肮脏。

我创建了一个基于这个确切想法的库:https://github.com/rosell-dk/htaccess-capability-tester - rosell.dk

1
另外一种方法是通过exec()
exec('/usr/bin/httpd -M | find "rewrite_module"',$output);

如果加载了mod_rewrite,它将在输出中返回"rewrite_module"。

0

针对IIS英雄和女英雄们:

无需寻找mod_rewrite。 只需安装Rewrite 2模块,然后导入.htaccess文件即可。


0
使用这个函数:
function apache_module_exists($module)
{
    return in_array($module, apache_get_modules());
}

0

实际上,仅仅因为一个模块被加载,并不意味着你放置在 .htaccess 目录中的指令已经启用。你可能需要知道的是:重写是否起作用?唯一确定的方法是进行实际测试:将一些测试文件放在服务器上,并使用 HTTP 请求它。

好消息是:我创建了 一个库 来完成这个任务(检测各种 .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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接