Dietcubeのデプロイについてメモ

Dietcube を試すDietcube を試す その2の続きです。

一通りDietcubeで開発して、テスト環境(PHPビルトインWebサーバ)での動作チェックもして、いざサーバにデプロイをしてみたところ……「404 Not found」の表示になってしまいました……。

内部的には

[yyyy-MM-dd hh:ii:ss] app.ERROR: Error occurred.  {"error":"Dietcube\\Exception\\HttpNotFoundException","message":"404 Not Found"} []

のエラーです。また、アプリケーションはルーティングも行っているため、https://example.jp/だけでなくhttps://example.jp/hoge/fugaのようなURLも受け入れられなければなりません。

最初はサブディレクトリで試験したのですが、さすがに最初からそれでは上手く行かないだろう、と思い直してディレクトリ構造を見直しました。

最初はどこをどうすれば良いかも分からなかったのですが、検索したらCreate Project and Configuration – Dietcube Documentationというページに「webrootdirectory」という記載があって設定が記述されていたのでそれを参考にしました。

/                   # 仮想サイトのDocumentRoot
├ app/
│ ├ Controller/
│ ├ config/
│ ├ Service/
│ ├ template/
│ ├ Application.php
│ └ Route.php
├ tmp
└ webroot
  ├ css/
  │ └ css群
  ├ img/
  │ └ jpgやpngの画像
  └ index.php

このような構造で、以下の.htaccessを仮想サイトのDocumentRootに配置しました。

RewriteEngine On
RewriteBase /webroot/

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule index.php - [QSA,L,C]
RewriteRule (.*) - [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} \.(css|js|jpg|jpeg|gif|png|svg|ico)$
RewriteCond %{REQUEST_FILENAME} !^(.*)(webroot)+(.*)$
RewriteRule ^(.*)$ /webroot/$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

期待としては

  • https://example.jp/へのアクセスはhttps://example.jp/webroot/index.phpで処理
  • cssやJS、画像などのサブリソース、例えばhttps://example.jp/css/hoge.csshttps://example.jp/webroot/css/hoge.cssにアクセス

という形を想定していたのですが、トップページは確かに処理されるものの、サブリソースが404になってしまいました。

最終的にはサブリソースは直下に置く形に妥協しました。

/                   # 仮想サイトのDocumentRoot
├ app/
│ ├ Controller/
│ ├ config/
│ ├ Service/
│ ├ template/
│ ├ Application.php
│ └ Route.php
├ tmp
├ webroot
│ └ index.php
├ css/              # 移動
│ └ css群
└ img/              # 移動
  └ jpgやpngの画像

.htaccessはほぼ上述のApacheの設定の通りに直して、以下のようにしました。

RewriteEngine On
RewriteBase /webroot/

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule index.php - [QSA,L,C]
RewriteRule .* - [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

これでひとまず動作することは確認。やや納得が行かない形ではありますが……。

参考

Dietcube

.htaccessチェック

参考記事

この記事を書いた人

アバター

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。