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

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

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

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


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

検索

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

フォーラムガイド


関連リンク

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

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