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

シェル基礎2

シェルコマンド使い始めて数年たちますが、いまだに知らないことはおおいですし、早く知っとけばよかった的なこともたくさんあります。 そんな小ネタ集を alias よく使うコマンドを別名で登録することができ …

no image

FTPソフトでのアクティブモード&パッシブモードについて

Webアプリを作る場合、基本的にSSHが使えることが前提だったんですが、先日安いサーバーでWebサイトを作る案件があり、FTPでアップをする必要に迫られました。 その時に、「ログインはできているんだけ …

no image

nginxのデバッグ

今までいろいろと苦しめられてきた(汗)nginxのデバッグについて。 まず任意の文字や変数をログに出すことができます。 Contents1 変数の出力1.1 rewriteデバッグ2 小ネタ 変数の出 …

no image

カレントディレクトリ以下のすべてのCR+LFをLFに

windows環境からファイルをアップしていると文字コードがバラバラだったりすることが多々あります。 まあ何がめんどくさいかというと差分がチェックできない。これが最悪です。 gitのdiffコマンドの …

no image

自力での監視

Zabbixの勉強を進めていますが、マニュアル通りに設定していて、中で何をやっているかをあまり理解していなかったりします。 それだとちょっとまずいのでZabbixでの構築とともに自力での監視スクリプト …