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

BaseCMSのなかにBaserCMSを設置した場合の.htaccess

nagachan > BaseCMSのなかにBaserCMSを設置した場合の.htaccess @ 2015/1/21 18:01
みなさん、こんにちは。

ドキュメントルートにBaserCMSサイトを設置していますが、もう一つサイトを作ることになり、
「/app/webroot/」の下に「member」というフォルダを作成して新規インストールしてみました。

とりあえずインストールは成功しましたが、追加したサイトへのアクセスを「http://xxxx.jp/member/」にしたいと思い、.htaccessをいじり回してみました。

以下の設定で、「http://xxxx.jp/app/webroot/member/」でアクセスするようになりましたが、「/app/webroot」部分を削って、「http://xxxx.jp/member/」でアクセスできるようにしたいのですが可能でしょうか。

「/app/webroot/member/」の.htaccess

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


「/app/webroot/member/app/webroot」の.htaccess

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


ご教示のほど、よろしくお願いいたします。


■ BaserCMSのバージョン:3.0.6.1
■ スマートURLの利用:ON
■ 設置フォルダ:サブフォルダ
■ 利用しているデータベース:MySQL
■ PHPスキル(自己評価):D
n1215 > Re: BaseCMSのなかにBaserCMSを設置した場合の.htaccess @ 2015/1/24 1:13
nagachan 様

まずはじめに、xxxx\.jpは取得可能なドメインなので、
例示のために予約されているexample.comなどで表記していただいた方が良いかと思います。
(現状Webサイトは設置されていないようですが、今後http:// xxxx.jp/member/ に悪意あるページが設置される可能性もゼロではありません。)

さてご質問についてですが、
.htaccessのURLリライトの動作について理解する必要があるかと思います。

説明の単純化のため.htaccessの番号を振ります。

{ドキュメントルート}(baserCMSの設置ディレクトリその1)
  ├ .htaccess (1)
  └ app/
    └webroot/
      ├ .htaccess (2)
      └ member/(baserCMSの設置ディレクトリその2)
        ├ .htaccess (3)
        └ app/
          └ webroot/
            └.htaccess (4)


●.htaccessによるリライトの流れ
まずはドキュメントルートに設置したbaserCMSの前段のWebサーバ(Apache)による.htaccessの処理の流れについて見てみましょう。

.htaccessが有効な状態で、
http://example.com/path/to/file へのアクセスがあったとすると、
Webサーバ(Apache)は.htaccessを深い階層のものを優先して適用します。
1.{ドキュメントルート}/path/to/.htaccess 存在せず
2.{ドキュメントルート}/path/.htaccess 存在せず
3.{ドキュメントルート}/.htaccess (1)存在するので適用

(1)の.htaccessは
	RewriteEngine on
	RewriteBase /
	RewriteRule ^$ app/webroot/ [L] //トップページを{ドキュメントルート}/app/webroot/にリライト
	RewriteRule (.*) app/webroot/$1 [L] //その他のURLを{ドキュメントルート}/app/webroot/以下にリライト

となっているので、パスは{ドキュメントルート}/app/webroot/path/to/file向けに書き換えられます。

さらにWebサーバ(Apache)は下記の優先順位で.htaccessを適用します。
1.{ドキュメントルート}/app/webroot/path/to/.htaccess 存在せず
2.{ドキュメントルート}/app/webroot/path/.htaccess 存在せず
3.{ドキュメントルート}/app/webroot/.htaccess (2)存在するので適用
4.{ドキュメントルート}/app/.htaccess 存在するが(2)によって上書きされている
5.{ドキュメントルート}/.htaccess (1) 存在するが(2)によって上書きされている

(2)の.htaccess
Allow from all
RewriteEngine on
RewriteBase /app/webroot
RewriteCond %{REQUEST_FILENAME} !-d //リクエストされたファイル名と一致するディレクトリがない
RewriteCond %{REQUEST_FILENAME} !-f //かつ 一致するファイルもない
RewriteRule ^(.*)$ index.php [QSA,L] //場合は baesrCMSの処理開始用ファイルを呼ぶ

となっているので、/app/webroot/path/to/fileというファイルやディレクトリが存在しなければそのままbaserCMSに処理が渡されます。

●本題
上記のように、2つの.htaccessが協調して動いているということがわかりました。
方針としては、{ドキュメントルート}/member/hogehogeは最初に(1)の.htaccessで処理されるので、その段階で、
下位のbaserCMSの(4)の.htaccessに処理が渡るようにリライトすればいいことになります。
((3)を経由してもいいですがややこしいかなと)

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


(4)の.htaccess
Allow from all
RewriteEngine on
RewriteBase /app/webroot/member/app/webroot
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]


さらに下位のbaserCMSのinstall.phpを変更します。
{ドキュメントルート}/app/webroot/member/app/Config/install.php
//この行を追加
Configure::write('App.baseUrl', '/member');


サーバの設定によっては微妙に違う可能性があるのですが、こんな感じでいかがでしょうか。

最後にいまさらですが、2つ目のbaserCMSを
{ドキュメントルート}/app/webroot/memberに設置するよりも
{ドキュメントルート}/memberに設置したほうが設定が楽な気もしますね。

Twitter: @n_1215

nagachan > Re: BaseCMSのなかにBaserCMSを設置した場合の.htaccess @ 2015/1/24 9:10
n1215 様

丁寧なご回答ありがとうございました。

細かくご説明いただき、大変参考になりました。
RewriteModureの仕組みはなかなか分かりにくいのですが、公式サイトのマニュアルにも掲載していただきたいほどのわかりやすい内容です。

URL表記の件は大変失礼いたしました。

早速試してみましたが、きちんと動作しない部分がありますので、きちんと整理して試してみたいと思います。
正常動作するようになりましたら、またご連絡いたします。

大変ありがとうございました。

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


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

検索

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

フォーラムガイド


関連リンク

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

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