no-image

nginxのrewriteで正規表現{}を使う時はダブルコーテーションでくくる

nginxで転送ルールを書くときにハマったのでメモ。

rewrite ^/test/(\d*)$ /test2-$1.html permanent;

みたいに正規表現を使って書くことがあります。

ここでちょっと格好つけて、文字数を指定する正規表現{1,9}みたいなのを付けたらうまくいかなかったのです。
例えばこんな具合。({1,9}は1~9個っていう意味の正規表現です)。

rewrite ^/test/(\d{1,9})$ /test2-$1.html premanent;

ただ、nginxではサーバーの構文で{}が使われているため、””でくくらないと以下のエラーが出ます。

nginx: [emerg] directive "rewrite" is not terminated by ";" in /etc/nginx/xxxxxxxx.conf

このエラーは「rewriteは;で終わらないとダメだよ」っていうエラーなんですが、本当の問題は{}が””内で使われていないためです。

つまり文字数指定の{}はそのままでは使えないので、転送前のルールを””で囲って以下のようにしたらうまくいきました。

rewrite "^/test/(\d{1,9})$" /test2-$1.html premanent;

すごい初歩的なことなんだけど、本を読んでやらないとこういうことがおきるんですね。

pocketlinehatebuimagegalleryaudiovideocategorytagchatquotegoogleplusfacebookinstagramtwitterrsssearchenvelopeheartstaruserclosesearch-plushomeclockupdateeditshare-squarechevron-leftchevron-rightleafexclamation-trianglecalendarcommentthumb-tacklinknaviconasideangle-double-upangle-double-downangle-upangle-downstar-halfstatus