一人もくもく会 α verでサービス開始しました。

Angular2とCakePHP3を共存させる

AngularとCakePHPを共存、つまり同じホスト名で動作させたい場合。 例えば下記のように隣同士で並んでいるとする。 Angularはビルドしたdistフォルダのみの公開でその他のソースはアップなどはしない場合。

  • app
  • dist

公開フォルダはAngular側のdistフォルダにするが、 AngularもCakePHPもルーティングが必要になるので、distフォルダ内の.htaccessで両方動作するように設定を行う。

CakePHP側は、全てapiというprefix内にプログラムを入れることで振り分けが容易となる。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/api/
RewriteRule ^ index.php [L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]

index.phpCakePHPのwebrootのもののパス部分の記述だけを修正。下記の2箇所。

require dirname(__DIR__) . '/app/vendor/autoload.php';
$server = new Server(new Application(dirname(__DIR__) . '/app/config'));

index.php.htaccessはAngularの開発時のsrcフォルダに入れておき、 angular-cli.jsonのapps.assetsの設定に含めておけば良い。

こういった方法であればホスト名も同じにできるので、SSLを2つ分とったり、などという手間をかける必要がなくなる。