投稿

nginxでapple-touch-iconをrewriteしたい

nginxでapple-touch-iconをrewriteしたい

解決

rewriteに last を設定する。

location ~ ^/apple-touch-icon-(.*)\.png$ {
    rewrite ^(.*)$ /apple-touch-icon.png last;
}

location / {
    # railsへリバースプロキシ
}

事象

実例で学ぶ、Nginxのrewriteに指定できるbreakとlastの違い | Code & Business より

location ~ ^/apple-touch-icon(.*)\.png$ {
    root /tmp/nginx/;
    rewrite ^(.*)$ /apple-touch-icon.png break;
}

と書いてあったので、

location ~ ^/apple-touch-icon(.*)\.png$ {
    rewrite ^(.*)$ /apple-touch-icon.png break;
}

location / {
    # railsへリバースプロキシ
}

で動かなかった。

原因

break を設定すると、他のlocationを検索しなくなるため。

NGINX Web サーバ | NGINX 日本語訳

last は 現在のバーチャルサーバまたはlocationのrewrite ディレクティブの実行を停止しますが、locationの検索は続きます。そして、新しいlocationの rewrite ディレクティブは実行されるでしょう。

break パラメータはbreakディレクティブと同様に 現在のレベルの rewrite ディレクティブの処理を停止し、locationの検索を停止します。そして 新しいlocationのrewrite ディレクティブは実行されないでしょう。

トレンドのタグ