BETA

Slim 4 をサブディレクトリで使用する

投稿日:2020-04-26
最終更新:2020-04-26

PHPのマイクロフレームワークであるSlimが4にバージョンアップしたのは知っていたのですが、終ぞ今まで手を出せずにいました。

ようやくドキュメントを読み始め、そこで「サブディレクトリで使用する場合はどうするのだろうか?」と思ったのでメモしておきます。

……通常はルートディレクトリだと思いますが。

検索してみると、Slimのコアメンテナーの一人であるRob Allen氏のWebサイトがヒットしました。

……本当、Slimに関することならば公式ドキュメントかこのサイトを読めば事足りてしまうのではないでしょうか。

  • URLがhttps://example.com/で、対応するルートディレクトリが/var/www/htmlとする
  • SlimのアプリケーションのURLはhttps://example.com/myappで、対応するディレクトリが/var/www/html/myappとする
  • Slim4のindex.php/var/www/html/myappにあるものとする

という条件のとき、Apacheの.htaccessとslim4の設定が以下、とのこと。

.htaccess

RewriteEngine On  
RewriteBase /myapp  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule ^ index.php [QSA,L]  

Slim 4 の設定

Slim 4 の設定としては、index.phpに以下の1行を加えるとのこと。

$app->setBasePath('/myapp');  

さて、この.htaccessとSlim 4 の設定をもう少し具体的に見ていきたいと思います。

例えば、Slim-Skeletonの場合です。

Slim-Skeletonの場合、public/index.phpがアプリケーションの起点となるプログラムなので、イメージとしてはhttps://example.com/がWebサイト、https://example.com/publicがSlim 4 のアプリケーションにアクセスできるURL、という形でしょうか(これだとSlim 4 のapp/src/といったファイルやディレクトリ群がルート直下に散らばるので汚くなってしまうので、実際はもう少し工夫したいところ……)。

ただ、この例ならばpublic/.htaceessindex.phpの両方が初めからあるのでそれらを書き換えて使うことができます。

public/.htaccess

<IfModule mod_rewrite.c>  
  RewriteEngine On  

  # 略  

  # If the above doesn't work you might need to set the `RewriteBase` directive manually, it should be the  
  # absolute physical path to the directory that contains this htaccess file.  
  # RewriteBase /  

#  RewriteCond %{REQUEST_FILENAME} !-f  
#  RewriteRule ^ index.php [QSA,L]  

  RewriteBase /public  
  RewriteCond %{REQUEST_FILENAME} !-f  
  RewriteCond %{REQUEST_FILENAME} !-d  
  RewriteRule ^ index.php [QSA,L]  
</IfModule>  

一番最初にRewriteEngine Onが記述されているので、</IfModule>直前の2行をコメントアウトしてサンプルのRewriteEngine Onより後の行を貼り付けます。

public/index.php

// 略  

// Instantiate the app  
AppFactory::setContainer($container);  
$app = AppFactory::create();  
$callableResolver = $app->getCallableResolver();  

$app->setBasePath('/public'); // 追加  

// 略  

Slim 4 の設定の方は、$appが宣言されてルーティングする前ということで、$appがインスタンス化された直後辺りが良いのではないでしょうか。

この2ヶ所を書き換えた状態でhttps://example.com/publicにアクセスして、Slim-SkeletonのHello world!が表示されればOK。

これでサブディレクトリでも使用できることが確認できました。

……ただ、困ったことにsetBasePathメソッド、Slim 4 Documentation - Slim Frameworkで検索しても出てこないのですよね……ついでに日本語の情報も見当たりませんでした。

参考

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

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

アルム=バンドのQrunch

よく一緒に読まれる記事

0件のコメント

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