1. はじめに
Google App Engine の PHP 7.2 用ランタイム (runtime: php72) は、ウェブブラウザからのアクセスを「1つのPHPファイルで受け付ける」仕様になっています(デフォルトでは、public/index.php
もしくは index.php
)。PHP用のCMSやフレームワークなどは、この仕様にマッチしているのであまり困ることはないかもしれません。
しかし、フレームワークなどを使わない普通のPHPサイトは、以下のような感じになっているはずです。
- URL:
https://example.com/foo/
→/foo/index.php
ファイルにアクセスさせる。 - URL:
https://example.com/bar/baz/
→/bar/baz/index.php
ファイルにアクセスさせる。
こちらの場合、URL上のパスに合致した位置の PHPファイルがアクセスを受け付けるようになっています。
GAE でこのようなアクセスをさせたい場合にはどうすればよいのでしょうか?
本ページでは、このタイプのPHPサイトを GAE (runtime は php72) で実現する方法を紹介します。
2. 普通のPHPサイトを実現する方法
ポイントだけ説明しますが、まずは app.yaml
に以下を記述します。
runtime: php72
entrypoint: serve controller.php
この記述により、ウェブブラウザからのアクセスを controller.php
ファイルで一括して受け付けることになります。
controller.php
ファイルには以下を記述します。
<?php
$path = @parse_url($_SERVER['REQUEST_URI'])['path'];
switch ($path) {
case '/':
require 'index.php';
break;
// e.g. /home/ → require home/index.php
case (preg_match('@^/(.*)/?$@i', $path, $matches) ? true : false):
require $matches[1] . '/index.php';
break;
default:
http_response_code(404);
exit('Not Found');
}
こちらでは switch
文を使い、アクセスのあったパスに見合った index.php
ファイルを読み込ませています。case
のところに preg_match
関数を使うのが少し変わっていますが、ちゃんと動くはずです。
必要な記述は以上です。
思ったより簡単に実現できますので、是非参考にしてみてください。