用这个:
在.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]