■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。
このフォーラムは閲覧専用のアーカイブです。

UserDir配下でスマートURLがうまく動作しません。

kuma > UserDir配下でスマートURLがうまく動作しません。 @ 2010/12/4 8:13
動作検証させてもらっております。

UserDir配下に設置してスマートURLを有効にしたところ、下記問題が発生しました。
1.[ホーム]の表示で、記事部分にて404エラー「/は見つかりません」となる
2.携帯でアクセスしたときのリダイレクトが、間違ったURLになる。(後述)

■環境
BaserCMS1.6.7
サーバー:Redhat Linux ES4

下記に設置しております。
設置パス:/home/<ユーザー名>/public_html/basercms/
URL:http://<ドメイン名>/~<ユーザー名>/basercms/

■詳細情報
リダイレクト先URLですが、下記の様になっていました。
http://<ドメイン名>/home/<ユーザー名>/public_html/basercms/m/

ちょっと内部解析してみたところ、baseUrl()関数内部がうまく動作していないらしく
・Configure::read('App.baseUrl')が取得できていない
・代替処理でdocRoot()からの補正処理で「home/<ユーザー名>/public_html/basercms」となってしまう。
のが原因のようです。

Configure::read('App.baseUrl')はcore.phpで定義されていて、bootstrap.phpでは取得できているのですが、どこかで消えてしまっている感じでした。

以上、ご参考までに
ryuring > Re: UserDir配下でスマートURLがうまく動作しません。 @ 2010/12/5 20:53
こんにちは。

ご報告ありがとうございます。

調査したところ、basics.phpのdocRoot関数に不具合があるようです。

http://project.e-catchup.jp/issues/1141

何かいい方法がありませんかね・・?

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ

kuma > Re: UserDir配下でスマートURLがうまく動作しません。 @ 2010/12/9 17:07
単純に、Dispatcher::baseUrl()の中の
$base = str_replace($replace, '', dirname(env('PHP_SELF')));
でいけませんかね?
$_SERVER["PHP_SELF"]だとPATH_INFOも入るので、$_SERVER["SCRIPT_NAME"]の方がよさそうですが
kuma > Re: UserDir配下でスマートURLがうまく動作しません。 @ 2010/12/13 16:53
baseUrl()とdocRoot()を下記に書き換えて動作できました。
通常設置では未検証です。

<設置パス>/app/webroot/⇒<設置パス>に補正する処理を、2階層上フォルダとして入れてますが、
「/app/webroot/」をうまく取得できれば、置換で済みそうです。

参考になれば幸いです。


function baseUrl() {
	$appBaseUrl = Configure::read('App.baseUrl');
	if($appBaseUrl) {
		$_url = $_SERVER['REQUEST_URI'];
		$baseUrl = $appBaseUrl.'/';
	}else {
//		$_baseUrl = str_replace(DS,'/',preg_replace("/^\\".DS."/i",'',str_replace(docRoot(),'',ROOT)));
		$_baseUrl = str_replace(DS,'/',preg_replace("/^\\".DS."/i",'',docRoot()));
		$_baseUrl = dirname(dirname($_baseUrl));

		if($_baseUrl) {
			$baseUrl = '/'.$_baseUrl.'/';
		}else {
			$baseUrl = '/';
		}
	}
	return $baseUrl;
}

function docRoot() {
	$replace = array('<', '>', '*', '\'', '"');
	$docRoot = str_replace($replace, '', dirname(env('PHP_SELF')));

	return str_replace('/', DS, $docRoot);
}
ryuring > Re: UserDir配下でスマートURLがうまく動作しません。 @ 2010/12/14 11:36
kumaさんコード提供ありがとうございます。

ただ、webrootの位置は、次のページのように移動可能としたいので、
http://basercms.net/manuals/etc/1.html

色々検討したところ次のコードにしようと思います。

	function baseUrl() {

		$appBaseUrl = Configure::read('App.baseUrl');
		if($appBaseUrl) {
			$baseUrl = $appBaseUrl.'/';
		}else {
			// $_GET['url'] からURLを取得する場合、Controller::requestAction では、
			// $_GET['url'] をリクエストしたアクションのURLで書き換えてしまう為、
			// ベースとなるURLが取得できないので、$_SERVER['QUERY_STRING'] を利用
			$url = str_replace('url=', '', $_SERVER['QUERY_STRING']);
			$baseUrl = str_replace($url, '', $_SERVER['REQUEST_URI']);
		}
		return $baseUrl;
		
	}


いかがでしょうか?

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ