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

Tie*_*ies 148 php apache iis mod-rewrite

我想知道是否有可能检查是否mod_rewriteApacheIIS上启用了PHP.

存在用于IIS的ModRewrite.检查一下here.

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

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

特别是对于Microsoft IIS.

谢谢!

kba*_*kba 124

如果你正在使用mod_php,你可以使用apache_get_modules().这将返回所有已启用模块的数组,因此要检查是否mod_rewrite已启用,您可以这样做

in_array('mod_rewrite', apache_get_modules());
Run Code Online (Sandbox Code Playgroud)

不幸的是,你最有可能尝试用CGI来做这件事,这让它变得有点困难.

但是,您可以使用以下方法对其进行测试

strpos(shell_exec('/usr/local/apache/bin/apachectl -l'), 'mod_rewrite') !== false
Run Code Online (Sandbox Code Playgroud)

如果上述条件评估为true,则mod_write启用.

  • @Gerep`phpinfo()`对许多事情都很有用,但是如果你想编写一个使用`mod_rewrite`的系统,如果它被启用或以其他方式回退到某些其他行为,那么以编程方式检测它会很有用. (2认同)

Sha*_*ran 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>
Run Code Online (Sandbox Code Playgroud)

  • 是的,我们可以在phpinfo.php中看到所有Apche的"加载模块" (2认同)

a.l*_*l.e 51

我喜欢Christian Roy的解决方案:

###  .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>
Run Code Online (Sandbox Code Playgroud)

然后,您可以签入您的PHP代码

    array_key_exists('HTTP_MOD_REWRITE', $_SERVER);
Run Code Online (Sandbox Code Playgroud)

不知道这是否也适用于IIS(我无法检查),但可能性很大.

  • 使用`<IfModule mod_env.c>`它几乎是完美的.:) (4认同)
  • 启用.htaccess后@ale 500内部服务器错误. (3认同)

小智 35

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

<?php 
phpinfo();
Run Code Online (Sandbox Code Playgroud)

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


loy*_*ola 26

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

在此输入图像描述

希望有帮助!

谢谢


h0m*_*yun 11

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

httpd -l
Run Code Online (Sandbox Code Playgroud)

  • 或者 **apachectl -M** 在 Ubuntu 中也是如此 (2认同)
  • __httpd -M__显示已加载的静态模块和共享模块的列表。 (2认同)

use*_*798 7

<?php
phpinfo();
?>
Run Code Online (Sandbox Code Playgroud)

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

这很简单而且有效.

<?php foreach( apache_get_modules() as $module ) echo "$module<br />";  ?>
Run Code Online (Sandbox Code Playgroud)


Ahm*_*bid 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);
Run Code Online (Sandbox Code Playgroud)

它可以在我的本地计算机上运行,​​也可以在基于IIS的webhost中运行.但是,在特定的apache服务器上,它对Apache没有用,因为apache_get_modules()被禁用但是mod_rewrite在该服务器中启用了.