rewriteは魔剤 使いすぎると死ぬ
やりたいゴール
http://hogehoge.turai.work/foo でアクセスされたときに、/foo.phpをリダイレクトなしに実行して表示したい
仕様としては以下のような感じ
- http://hogehoge.turai.work => /index.phpが表示される
- http://hogehoge.turai.work/foo => /foo.phpが表示される
- http://hogehoge.turai.work/foo.php => /foo.phpが表示される
- http://hogehoge.turai.work/foo/bar.php => /foo/bar.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