首页 文章

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

提问于
浏览
148

我想知道是否有可能检查 Apache 上的 mod_rewritePHP 中的 IIS 是否已启用 .

ModRewrite for IIS存在 . 检查一下here .

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

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

特别是对于微软 IIS .

谢谢!

14 回答

  • 50
    <?php
    phpinfo();
    ?>
    

    在“已加载模块”行的apache2handler中查看“配置” .

    这很简单而且有效 .

    <?php foreach( apache_get_modules() as $module ) echo "$module
    "; ?>
  • 92

    如果您使用的是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 .

  • 6

    复制这段代码并运行它以找出答案 .


    <?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>
    
  • 3

    我喜欢Christian Roy's solution

    ###  .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(我无法检查),但可能性很大 .

  • 7

    使用此代码上传名为info.php的文件并运行它:

    <?php 
    phpinfo();
    

    在页面上搜索mod_rewrite,看看是否可以在Loaded Modules下找到它 .

  • 34

    不要让它如此困难,你可以简单地找到 phpinfo();

    enter image description here

    希望有帮助!

    谢谢

  • 0

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

    httpd -l
    
  • 124

    这是我当前检查是否为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在该服务器中启用了 .

  • 0

    您可以获得已安装apache modules的列表,并进行检查 . 也许您可以通过搜索其.dll(或linux等效)文件来检查它是否已安装 .

  • 26

    两行代码:

    $isEnabled = in_array('mod_rewrite', apache_get_modules());
    echo ($isEnabled) ? 'Enabled' : 'Not enabled';
    
  • 1

    通过exec()的另一种方法 .

    exec('/usr/bin/httpd -M | find "rewrite_module"',$output);
    

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

  • 3

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

    的确,很脏 .

  • 0

    使用此功能:

    function apache_module_exists($module)
    {
        return in_array($module, apache_get_modules());
    }
    
  • 10

    如何重定向到已知文件,然后检查该重定向是否实际上与curl一起使用?

相关问题