Nginxで常にindex.phpを実行する

たとえば、

– http://example.com/piyo
– http://example.com/fuga
– http://example.com/foo/bar?fizz=buzz

というアクセスがすべて、内部的にindex.phpとして実行される設定にしたい場合があると思います。さらにパラメータ類(piyo, fuga, fizz, buzzなど)もPHP側で取得したい、つまり$_GET等を使いたいとします。

前提として、php-fpmでunix domain socket (path: /var/run/php5-fpm.sock)で動かしているものとします。

nginx.conf

# 中略
# PHP Fast CGI
location / {try_files $uri $uri/ /index.php?q=$uri&$args;}
location ~ \index.php$ {
  fastcgi_pass unix:/var/run/php5-fpm.sock;
  fastcgi_index index.php;
  include /etc/nginx/fastcgi_params;
} 
# 中略

↑こんな感じで書いたら行けました。これでどこにアクセスしてもindex.phpが走ります。Nginxの設定ファイルはけっこう分かりにくいので闇ですね。ちなみに静的なファイルはもちろんこれの前段でキャッシュしてあげるべきでしょう。

ちなみに、 location ~ \index.php$ で、~の代わりに=でも行けると思います(\がいらなくなるかもですが。。。)。

/index.php?q=$uri&$args;のq=$uriはいらないかもしれませんね、どうなんでしょう。