2018.6.14

rewriteでアクセスされたURLから対応するコンテンツを返す

rewriteを使ってアクセスされたURLから正規表現でIDを抽出し、対応するコンテンツをクライアントに返す方法です。

設定

ディレクトリ「/etc/nginx/conf.d」配下に置いたファイル「~.conf」に以下の設定を追加します。

server {
    listen 80;
    server_name example.com;

    rewrite ^/detail/([0-9]+)$ /public/contents/detail_$1.html;
}

上記の場合、「http://exmaple.com/detail/123」というURLでアクセスされると、クライアントには「http://exmaple.com//public/contents/detail_123.html」のコンテンツが表示されます。

リダイレクトはしていないので、ブラウザに表示されるURLはそのままの状態となります。

リダイレクト

rewriteでリダイレクトさせることも可能です。

server {
    listen 80;
    server_name example.com;

    rewrite ^/detail/([0-9]+)$ /public/contents/detail_$1.html permanent;
}

最後に「permanent」という文字を付加すると、「http://exmaple.com/detail/123」のアクセスはステータスコード「301」が返され、リダイレクトで「http://exmaple.com//public/contents/detail_123.html」にアクセスします。

この場合、ブラウザに表示されるURLも当然リダイレクト後のURLとなります。

「permanent」は恒久的な変更を示すステータスコード「301」が返されますが、一時的なものであれば「redirect」として「302」のステータスコードを返すようにします。

Nginx】関連記事