0

私はmod_rewriteで美しいことをするPHPソフトウェアを持っています。ただし、同じソフトウェアは、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)はサーバーによって無効にでき、2番目のカスタムのものはmod_envがインストールされている場合にのみ$_SERVERに存在します。だから私が最善の解決策だと思うのは、あなたの.htaccessにあなたのファイル(単に「ok」を返す)を指す偽のURLリダイレクトを作成し、.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を検出する方法は?

クレジットはChristianRoyに送られます

于 2012-05-25T14:29:35.013 に答える