modxcms-jp / evolution-jp

https://modx.jp/
32 stars 25 forks source link

initialize.inc.phpとinitialize.functions.incに関して #165

Closed Fiberalph closed 8 years ago

Fiberalph commented 8 years ago

Apache設定(httpd.conf)にて、 AliasMatch設定 AliasMatch ^/aaa/(.*) /home/bbb/ccc/$1 で、ドメインとディレクトリ名を変え、 base_urlを「/aaa/」で使用する場合、 $_SERVER['SCRIPT_FILENAME']が"/home/bbb/ccc/index.php" $_SERVER['SCRIPT_NAME']が"/aaa/index.php" となります。

そうなると、 「initialize.inc.php」で実行する、

if (!defined('MODX_BASE_URL'))  define('MODX_BASE_URL', $init->get_base_url(MODX_BASE_PATH));

の、$init->get_base_urlメソッドにて、 「initialize.functions.inc」

if(strpos(str_replace('\\','/',$_SERVER['SCRIPT_FILENAME']),$_SERVER['SCRIPT_NAME'])===false) {
            if(strpos(str_replace('\\','/',$_SERVER['SCRIPT_FILENAME']),'/install/index.php')!==false)
                return substr($_SERVER['REQUEST_URI'],0,strrpos($_SERVER['REQUEST_URI'],'/install/')) . '/';
            else {
                echo 'Missing base_url';
                exit;
            }
        }

が、どうあがいても「Missing base_url」になってしまいます。 commit『7a81ead400aba70955faf9c1defa246a4fd49897 @yama yama committed on 11 Nov 2015』 がただのRefactorであれば、「initialize.inc.php」を元に戻しても良いでしょうか? このRefactorに意図があれば教えてください。

よろしくお願いします。

yama commented 8 years ago

https://github.com/modxcms-jp/evolution-jp/commit/7a81ead400aba70955faf9c1defa246a4fd49897 詳しくは覚えてませんが、この部分でしょうか?

yama commented 8 years ago

この部分は、「インストーラである場合」と「チルダ付きユーザディレクトリ」に対する考慮を整理すればすっきりできると思います。不明なケースは、雑ですが、「Missing base_url」で終わらせるようにしています。 $_SERVER['SCRIPT_FILENAME']に頼らないアプローチが必要かもと思います。

yama commented 8 years ago
    function get_base_url($base_path) {
        $SCRIPT_NAME = $_SERVER['SCRIPT_NAME'];
        if(defined('IN_MANAGER_MODE')) {
            if(strpos($SCRIPT_NAME,'/manager/')!==false)
                return substr($SCRIPT_NAME,0,strrpos($SCRIPT_NAME,'/manager/')+1);
            elseif(strpos($SCRIPT_NAME,'/assets/')!==false)
                return substr($SCRIPT_NAME,0,strrpos($SCRIPT_NAME,'/assets/')+1);
            elseif(strpos($SCRIPT_NAME,'/install/')!==false)
                return substr($SCRIPT_NAME,0,strrpos($SCRIPT_NAME,'/install/')+1);
        }
        if(substr($SCRIPT_NAME,0,2)==='/~' && substr($SCRIPT_NAME,-9)==='index.php') {
            $dir = substr($SCRIPT_NAME,0,strrpos($SCRIPT_NAME,'/'));
            $pos = strrpos($dir,'/',-1);
            if($pos) $dir = substr($dir,$pos);
            return $dir.'/';
        } else {
            $dir = substr($SCRIPT_NAME,0,strrpos($SCRIPT_NAME,'/')+1);
            $dir = preg_replace('@(.*?)/assets/.*$@', '$1', $dir);
            if(substr($SCRIPT_NAME,0,2)==='/~') $dir = '/~' . substr($dir,1);
            $dir = rtrim($dir, '/') . '/';
            return $dir;
        }
    }

これは動作しますか?

Fiberalph commented 8 years ago

動作しました!