BETA

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

投稿日:2020-01-21
最終更新:2020-01-22

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チェック

参考記事

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

アルム=バンドのQrunch

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう