0

我有一个 PHP 软件,它用 mod_rewrite 做漂亮的事情。但是相同的软件应该在未安装 mod_rewrite 的服务器上运行。如果安装了 mod_rewrite 并且应用了某个规则,我可以检查我的 php 代码吗?

例如,像这样:

    if ((mod_rewrite is enabled) and (mod_rewrite_rule is OK)){
        return  createBeautifullLink();
    }else{
        return createUglyLink();
    }

提前致谢

4

2 回答 2

7

用这个:

.htaccess

<IfModule mod_rewrite.c>
   # inform php that mod_rewrite is enabled
   SetEnv HTTP_MOD_REWRITE on
   ...

PHP中:

$mod_rewrite = FALSE;
if (function_exists("apache_get_modules")) {
   $modules = apache_get_modules();
   $mod_rewrite = in_array("mod_rewrite",$modules);
}
if (!isset($mod_rewrite) && isset($_SERVER["HTTP_MOD_REWRITE"])) {
   $mod_rewrite = ($_SERVER["HTTP_MOD_REWRITE"]=="on" ? TRUE : FALSE); 
}
if (!isset($mod_rewrite)) {
   // last solution; call a specific page as "mod-rewrite" have been enabled; based on result, we decide.
   $result = file_get_contents("http://somepage.com/test_mod_rewrite");
   $mod_rewrite  = ($result=="ok" ? TRUE : FALSE);
}

第一个(apache)可以被服务器禁用,第二个自定义的只有在安装了mod_env时才会存在于$_SERVER中。因此,我认为最好的解决方案是在您的 .htaccess 中创建一个虚假的url 重定向,该重定向指向您的某个文件(仅返回一个“ok”)并使用来自 .php 的重定向调用它;如果返回“ok”,您可以使用干净的 url.... htaccess中的重定向代码可能如下所示:

<IfModule mod_rewrite.c>
   ...
   RewriteEngine on
   # fake rule to verify if mod rewriting works (if there are unbearable restrictions..)
   RewriteRule ^test_mod_rewrite/?$    index.php?type=test_mod_rewrite [NC,L]
于 2012-05-25T15:03:15.983 回答
3

(如果 PHP不在CGI 中,则以下工作)

尝试这个 :

if (function_exists('apache_get_modules')) {
   $modules = apache_get_modules();
   $mod_rewrite = in_array('mod_rewrite', $modules);
} else {
   $mod_rewrite =  getenv('HTTP_MOD_REWRITE')=='On' ? true : false ;
}

或者这个:如何在没有 apache_get_modules() 的情况下检测 mod_rewrite?

归功于克里斯蒂安·罗伊

于 2012-05-25T14:29:35.013 回答