■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。

インストール先サブフォルダ名称とパスの文字喰い[スマートURL生成]

CMSCMS > インストール先サブフォルダ名称とパスの文字喰い[スマートURL生成] @ 2011/12/14 2:11
■ BaserCMSのバージョン:1.6.15
■ レンタルサーバー名:(ローカルのXAMPP開発環境を利用)
■ スマートURLの利用: [ON]
■ 設置フォルダ: [サブフォルダ]
■ 利用しているデータベース: [SQLite / MySQL]
■ PHPスキル(自己評価): [ E ]
■ OSの種類: Ubuntu (natty)
■ PHPのバージョン: 5.3.8
■ データベース種類・バージョン: SQLite3(PHPより利用) MySQL 5.5.16

はじめまして。よろしくお願いします。
今回、投稿しましたのは、
XAMPPにて、インストール・設定を完了しまして、管理画面より、「ニュース管理」をクリックしますと、404エラーとなってしまう為です。

原因自体は、
0:インストールフォルダ「/b」である。(サブフォルダインストール)
1:【ニュース管理】リンクは、「http://localhost/b/adminloglog_posts/index/1」にアクセスしようとしている。
2:SmartURLを切ると「http://localhost/b/index.php?/admin/blog/blog_posts/index/1」と正解のアドレスにアクセスし、正常動作。
3:誤アドレス「adminloglog_posts」から、どこか、mod_rewrite関連(SmartURL)で「/b」が喰われていることが判明。
4:試しに、インストール先subfolderを「c」とすると、正常動作する。
5:「RewriteCond %{REQUEST_FILENAME} !-f」の問題(存在フォルダにはそのままアクセス)かもしれないと思い、記述を外すも、動作しない。

よくよく考えてみれば、管理ページ内のリンク自体で文字喰いが起きているので、内部のスマートURL生成で問題が起きている可能性が高いのではないか、と思うのですが、いかがでしょうか。(PHPスクリプトソースはすみませんが追えていません。)
特殊なサブフォルダ名称がもともとの悪さの根源であるとは思うのですが、URL生成について気になりましたので、投稿します。
よろしくお願い致します。


以下、正規表現の問題かもしれませんので、mod_rewriteの設定を載せておきます。

[/b/.htaccess]
RewriteEngine on
RewriteBase /b
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]

[/b/app/webroot/.htaccess]
RewriteEngine on
RewriteBase /b/app/webroot
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

arata > Re: インストール先サブフォルダ名称とパスの文字喰い[スマートURL生成] @ 2011/12/14 20:45
CMSCMSさん、こんにちは!もいっちょこんにちは!

調べてみました。
BASERCMS\baser\views\helpers\baser.php の732行辺りに原因がありました。

$url = $this->getUrl($url);
//$_url = str_replace($this->base, '', $url);
// ここの $this->base に「/b」が入ってくることで、
// $url に含まれる文字列 /b/admin/blog/blog_posts/index/1 の中の「/b」全てが置き換えられる事で、
// 変なURLになってしまう模様。。。なので、
$_url = trim($url, $this->base);
$_url = '/' . $_url;
// trim を使って削除して、ルートパスとなるよう変更

と、してみました!

。。。誰かもっと良いやり方教えてください_(..)_

■ 不明点解消できるかも。逆引きガイドもあります baserCMS公式wiki
■ Twitter:@arata

CMSCMS > Re: インストール先サブフォルダ名称とパスの文字喰い[スマートURL生成] @ 2011/12/15 3:06
arataさん こんばんは!お世話になります!
#なるほどCMSCMSだから… ども。ども。(笑)
早速返信いただいて、ありがとうございます!!

なるほど!示して頂いたソースから、(なんとなくですが)
index.phpに渡された(URL)パラメータと、現在の(呼出し)パスを差分して、残ったパス(=インストールサブフォルダ)を一致検索で削除していたため、
「/b」文字列一致で消されてしまった…ということですね…?(PHP自体、そしてstr_replace関数について、もっとちゃんと勉強してきます…)

そこで示して頂いた、ltrim関数で文字列先頭を指定削除する、
実際に修正するとうまく動作しました。ありがとうございました!

arata > Re: インストール先サブフォルダ名称とパスの文字喰い[スマートURL生成] @ 2011/12/15 22:47
解決したようで良かったです!むほっ!(゚∀゚)

もうちょい良い方法があると思うんですけどねー。。。
有識者からのもっと良い方法・アドバイス絶賛募集中ですっ!!

宜しく鬼ヶ島す。

# きびだんご食べたい

■ 不明点解消できるかも。逆引きガイドもあります baserCMS公式wiki
■ Twitter:@arata

ryuring > Re: インストール先サブフォルダ名称とパスの文字喰い[スマートURL生成] @ 2011/12/19 21:30
こんばんは。

駄コード失礼しました。。

正規表現を使えば大丈夫だと思います。

$_url = preg_replace('/^'.preg_quote($this->base, '/').'\//', '/', $url);


チケットも切らせて頂きました。
ご報告ありがとうございます!

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

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

ログイン
ユーザー名:
パスワード:


  新規登録 / パスワード紛失

検索

facebook
フォーラムで悩みが解決した場合など、よかったら「いいね!」をポチっとクリックしてください!質問の回答者や開発者の励みになります

フォーラムガイド


関連リンク

オンライン状況
37 人のユーザが現在オンラインです。 (37 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 37