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

Closed
Fiberalph opened this Issue Jun 17, 2016 · 4 comments

Projects

None yet

2 participants

@Fiberalph
Contributor

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
Member
yama commented Jun 22, 2016

7a81ead
詳しくは覚えてませんが、この部分でしょうか?

@yama
Member
yama commented Jun 22, 2016

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

@yama
Member
yama commented Jun 22, 2016
    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
Contributor

動作しました!

@yama yama added a commit that referenced this issue Jun 23, 2016
@yama yama #165 Fix - $init->get_base_url() 97d7787
@Fiberalph Fiberalph closed this Jun 24, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment