動かざることバグの如し

近づきたいよ 君の理想に

Nginxで拡張子の.phpを省略してもPHPが動作するように設定したい

rewriteは魔剤 使いすぎると死ぬ

やりたいゴール

http://hogehoge.turai.work/foo でアクセスされたときに、/foo.phpリダイレクトなしに実行して表示したい

仕様としては以下のような感じ

Nginxの設定

以下は普通のNginxの設定例

server {
    listen 80;
    server_name hogehoge.turai.work;
    root /app/public;

    index index.html index.php;

    location ~ \.php$ {
        fastcgi_pass php-fpm:9000;
        include fastcgi_params;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

これにRewriteを付け加えるだけ

server {
    listen 80;
    server_name hogehoge.turai.work;
    root /app/public;

    index index.html index.php;

    location / {
        if (!-e $request_filename) {
            rewrite ^(.*)$ /$1.php;
        }
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        fastcgi_pass php-fpm:9000;
        include fastcgi_params;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

これで systemctl reload nginx で反映すればおk