我有一个PHP软件,用mod_rewrite做漂亮的事情。但是相同的软件应该在没有安装mod_rewrite的服务器上运行。如果安装了mod_rewrite且是否应用了某个规则,我可以检查我的php代码吗?
例如,像这样:
if ((mod_rewrite is enabled) and (mod_rewrite_rule is OK)){
return createBeautifullLink();
}else{
return createUglyLink();
}
提前致谢
答案 0 :(得分: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]
答案 1 :(得分: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 ;
}
或者:How to detect mod_rewrite without apache_get_modules()?
积分转到Christian Roy