skillup

技術ブログ

サーバー・ネットワーク

rewriteディレクティブ

投稿日:2016年12月11日 更新日:

リクエストURIを条件に応じて書き換えたり、リダイレクトする機能を使うときはrewriteを使います。こちら非常によく使う機能です。

具体的な例を見ていきましょう。

これはフレームワークでみられますが、パスをクエリストリングに変更する設定例です。例えば/users/1などでアクセスがあった場合、/show?users=1に書き換えられ処理が行われます。

この例でも使用しているようにrewrite表現部分の()内の値をリプレイスメント内の$1で参照しています。$1なのあとの?はもとのリクエストのクエリストリングを無視することを意味します。

例えば/user/1?key=valueのようなアクセスがあった場合、/show?user=1?key=valueに書き換えられるのを防ぐことができます。

rewriteディレクティブは下記のような記述方法で設定します。

rewrite   正規表現  リプレイスメント  フラグ

フラグ一覧

なし             rewriteを実行し、そのまま処理を継続
last              rewriteを実行し、すべてのlocationを対象に再度処理をはじめから実行
break           rewriteを実行し、一度実行したlocationは対象外にして処理をはじめから実行
redirect        ステータスコード302でリダイレクト
permanent    ステータスコード301でリダイレクト

よくあるrewriteパターン

検索の実行

入力URL                 http://sample.com/search/hogehoge

rewirteルール         rewrite  ^/search/(.*?)$   /search.php?q=$1?;

rewrite後のURI       http://sample.com/search.php?q=hogehoge

ユーザープロファイルページ

入力URL                 http://sample.com/user/31/james

rewirteルール         rewrite  ^/user/([0-9]+)/(.*?)$   /user.php?id=$1&name=$2?;

rewrite後のURI       http://sample.com/user.php?id=31&name=james

複数の引数

入力URL                 http://sample.com/index.php/param1/param2

rewirteルール         rewrite  ^/index.php/(.*?)/(.*?)$   /index.php?p1=$1&p2=$2?;

rewrite後のURI       http://sample.com/index.php?q1=param1&q2=param2

1つのパスに複数の情報

入力URL                 http://sample.com/topic-1234-50-somekey.html

rewirteルール         rewrite  ^/topic-([0-9]+)-([0-9]+)-(.*?)\.html$   /viewtopic.php?topic=$1&start=$2?;

rewrite後のURI       http://sample.com/viewtopic.php?topic=1234&start=50

参考文献

Nginx入門

-サーバー・ネットワーク
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

サーバー設定ファイルについて fastcgi周り

前回nginxの設定を書きましたが、今回はFastCGIについてメモ。 Contents1 そもそもCGIとは?2 CGIのデメリット3 FastCGIとは?4 ソース5 参考リンク そもそもCGIと …

no image

AWSのCLIに関して

実務でAWSを使ってたんですがテスト時にはコマンドを使っている方がはるかに早いためコマンドライン環境を作っておいたほうが良いです。 ちなみに使用する前にはAWSのコンソールからIAMユーザーを作成する …

no image

vagrant share

実はvagrantを使って仮想環境を一時的ではありますが、webから見ることができます。 1 まずはhttps://atlas.hashicorp.com/account/newにてアカウント登録。そ …

no image

serverspecによるサーバー自動テスト

最近は管理しているサーバーが多いのと、構成管理ツール(Ansible)なんかをちょくちょく使ってますが、ちゃんと入っているかどうかを確認するのはそれなりに大変だったりします。 が、構成管理ツール自体も …

no image

jenkinsでのSSH鍵認証&herokuからのソース取得

jenkinsでGitからソースを取得するときに鍵認証をかけている場合はそれ用の設定が必要になります。 基本的な考え方ですが、userがjenkinsだったときに、ssh鍵認証やherokuでどのよう …