はじめに
Apacheのリバースプロキシ機能については以前に記事にまとめましたが、ApacheのURLの書き換え(rewrite)機能を初めて本格的に使ったので、備忘録として記事をまとめてみました。
なお以下の設定内容については、技術評論社のApacheポケットリファレンスを参考にしました。
注意点
- 本記事に出てくる
aaaaa.ne.jp
やbbbbb.ne.jp
はドメインの一例です。
単純なリダイレクト
- 単純なリダイレクトの場合、マッチさせたいURLのパターン(
^/index.html$
)に続けてリダイレクト先のURLを書きます。
元のURL | リダイレクト先URL |
---|---|
http://aaaaa.ne.jp/index.html | http://bbbbb.ne.jp/index.html |
httpd.confの設定内容
RewriteEngine On
RewriteRule ^/index.html$ http://bbbbb.jp/index.html [L,R]
新しいパラメーターを付けてリダイレクト
- 新たに
id=123
という固定的なパラメーターを付ける場合、以下のようにパラメーターをベタ書きするだけでパラメーターを付けられます。 -
[L,R]
というオプションフラグは、L
が「ここで書き換え処理を終える」、R
が「リダイレクト処理」となります。
元のURL | リダイレクト先URL |
---|---|
http://aaaaa.ne.jp/index.html | http://bbbbb.ne.jp/index.html?id=123 |
httpd.confの設定内容
RewriteEngine On
RewriteRule ^/index.html$ http://bbbbb.ne.jp/index.html?id=123 [L,R]
パラメーターを保持してリダイレクト
-
id=123
というパラメーターを保持してリダイレクトする場合、以下のように正規表現を組み合わせてパラメーター部分とマッチさせて、リダイレクト先URLにマッチした部分($1
)を付加すればOKです。
元のURL | リダイレクト先URL |
---|---|
http://aaaaa.ne.jp/index.html?id=123 | http://bbbbb.ne.jp/index.html?id=123 |
httpd.confの設定内容
RewriteEngine On
RewriteRule ^/index.html(.*)$ http://bbbbb.ne.jp/index.html$1 [L,R]
パラメーターを保持しつつ、新たなパラメーターを付けてリダイレクト
- 「パラメーターを保持してリダイレクト」と似ていますが、パラメーターとマッチした部分(
$1
)の後ろに新たなパラメーターを「?」を付けた上で付け加えるのがポイントです。-
QSA
というオプションを付けることで、クエリ文字列部分を追加することができます。 - ちなみにApacheのリファレンスにおいて
QSA
フラグは「qsappend」と書かれているので、「Query String Append」の略がQSA
のようです。
-
元のURL | リダイレクト先URL |
---|---|
http://aaaaa.ne.jp/index.html?id=123 | http://bbbbb.ne.jp/index.html?id=123&name=nkojima&type=test |
httpd.confの設定内容
RewriteEngine On
RewriteRule ^/index.html(.*)$ http://bbbbb.ne.jp/index.html$1?name=nkojima&type=test [QSA,L,R]
パラメーターを保持しつつ、新たなパラメーターを付けた上で、別のURLに転送する
- リダイレクトではなくリバースプロキシ機能を使って別のURLに転送する場合は、
P
というオプションフラグを付けます。- それ以外の設定については、リダイレクト処理と同じとなります。
- この設定だとリバースプロキシとなるため、ブラウザのアドレスバー上のURLは
http://aaaaa.ne.jp/index.html?id=123
のままとなります。
元のURL | 転送先URL |
---|---|
http://aaaaa.ne.jp/index.html?id=123 | http://bbbbb.ne.jp/index.html?id=123&name=nkojima&type=test |
httpd.confの設定内容
RewriteEngine On
RewriteRule ^/index.html(.*)$ http://bbbbb.ne.jp/index.html$1?name=nkojima&type=test [QSA,L,P]