nginxよくわかんないよ(´;ω;`)
最近ちょこちょこいじっているのですが、設定周りでapacheと勝手が違う部分が多々あり苦労してます。
特にrewriteモジュールの記述の仕方があまりよく分かりません。FuelPHPを使いたいのでどうしても必要なのですが、肝心のところで結構ハマってました。
一度コツを掴むとapacheよりだいぶシンプルで書きやすいのですが、一応忘れてしまった時のためにメモメモ……
rewriteに至る基本的な流れは、
指定のURIに一致するファイルがあるか調べる → なかったらディレクトリがあるか調べる → それもなかったらrewriteする
と言った感じです。この部分はnginxのtry_files構文で簡単に書けます。
1 2 3 4 5 6 7 |
location / { try_files $uri $uri/ @rewrite; } location @rewrite { #ここでURIのリライトを行います。 } |
「location @rewrite…」から始まるlocationディレクティブは、「名前付きロケーション」と言うみたいです。内部リダイレクト処理を行う際に、アットマークから始まる名前を指定すると、その名前がついたブロック内の処理を行います。詳しくはnginxのドキュメントを参照してください。→http://wiki.nginx.org/HttpCoreModuleJa#location
ちなみに、try_filesを使わなくてもif文を利用すれば前述の流れは実現できますが、やたら長くなるし、nginx的には非推奨らしくいいとこなしなので、素直にtry_filesを利用するほうがいいと思います。
参考リンク: nginxのifに要注意 TECHSCORE BLOG
そして、ファイル・ディレクトリが存在しなかった場合のリライト処理ですが、俺は以下のように書きました。
1 2 3 |
location @rewrite { rewrite ^ /index.php?$request_uri last; } |
このあたりの書き方は個人差・環境差があるので一概には言えませんが、自分の手元の環境ではこれで動作しました。
書き方はリファレンスを参照!!→http://wiki.nginx.org/HttpRewriteModuleJa#rewrite
ここに書いてあることを更に凝縮して、しかも分かりやすい記事があるので、そちらを読んだほうが幸せになれるかもしれません……
参考リンク: nginx連載5回目: nginxの設定、その3 – locationディレクティブ – インフラエンジニアway – Powered by HEARTBEATS