PHP の組込みサーバーで良い感じの rewrite をする
Published: 2023/10/13
PHP は起動時に -S アドレス:ポート
オプションを指定することで、組込みの web サーバー機能を起動させながら、各種 php を実行させることができる。
これは、 Apache 経由の CGI で php ファイルを実行させるのに比べて、必要なミドルウェアが PHP のみになるため、ローカルの開発環境を構築するため等に利用できる。
https://www.php.net/manual/en/features.commandline.webserver.php
$ php -S localhost:8000
# => カレントディレクトリを root としたWebサーバを起動
これによって起動される Web サーバは、基本的な機能しか持っていないため、例えば Wordpress でカスタムパーマリンクなどをやる場合には、アセットとして対象のファイルが見つからなければ、 index.php
を起動する、みたいなことをやる必要がある。
そのようなニーズに答えるため、この php の -S
オプションは、引数の最後に php ファイルを受け取って、それによってルーティングを行わせることができる。
$ php -S localhost:8000 router.php
router.php
のファイルは、 false
を return
することで、引き続き、ただのWebサーバとして PHP を振る舞わせることができる。
動的な値を返したい場合には、その中身の文字列などを return
する。
あるあるな rewrite 動作を行わせる router.php
の書き方の例として、例えば以下の記事などがある。
PHP built in server and .htaccess mod rewrites
Does PHP's built in server not make use of .htaccess? Makes sense, I suppose, as it isn't relying upon Apache(?). Anyway, is it possible to tell the server to make use of these files - can it handl...
stackoverflow.com

これは例えば、 Wordpress を nginx で動かす設定例(nginx 公式) における nginx の動作にも一致した挙動となっている、はず。