だるろぐ

だるいぶろぐです

nginxのconfigでifの並記を実現する

追記 Wed Jan 11 10:53:25 JST 2012
本では「並記」じゃなくて「並置」と書いてました

nginxの本(ハイパフォーマンスHTTPサーバ Nginx入門)を読んで、なるほどと思ったメモ。

例えばapachemod_rewriteのこんなのを

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

nginxで実現しようとすると、素直にはいかない。
nginxのifは、if-elseも無いし、if andも無いし、ifのブロックの中に更にifを書けないので。

なので変数を使ってこのようにする手法が載っていた。

set $check "";

if (!-f $request_filename) {
    set $check "A";
}

if (!-d $request_filename) {
    set $check "${check}B";
}

if ($check = "AB") {
    rewrite . /index.php last
}


ifが成立したら、それぞれのifの中で変数に値を代入していって、最終的な変数の値を見る。
少々BKくさい。


本にも載っていたけど、この例ならば以下でいい。これはあくまで例示の為に載っていたのだけど、何でこんな例を選んだのだろ。

if (!-e $request_filename) {
    rewrite . /index.php last
}


そして今軽くググったら既に皆こういうことをしていたのだけどメモなので気にしない。