Closed Fiberalph closed 8 years ago
https://github.com/modxcms-jp/evolution-jp/commit/7a81ead400aba70955faf9c1defa246a4fd49897 詳しくは覚えてませんが、この部分でしょうか?
この部分は、「インストーラである場合」と「チルダ付きユーザディレクトリ」に対する考慮を整理すればすっきりできると思います。不明なケースは、雑ですが、「Missing base_url」で終わらせるようにしています。 $_SERVER['SCRIPT_FILENAME']に頼らないアプローチが必要かもと思います。
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;
}
}
これは動作しますか?
動作しました!
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」で実行する、
の、$init->get_base_urlメソッドにて、 「initialize.functions.inc」
が、どうあがいても「Missing base_url」になってしまいます。 commit『7a81ead400aba70955faf9c1defa246a4fd49897 @yama yama committed on 11 Nov 2015』 がただのRefactorであれば、「initialize.inc.php」を元に戻しても良いでしょうか? このRefactorに意図があれば教えてください。
よろしくお願いします。