ある案件にて、htmlのファイル名(URL)を変えて欲しいとリクエストされました。すでにgoogleにインデックスされていたので、リダイレクトすることにしました。この案件で、webサーバは、ApacheでなくNginxなので、Nginxにおいて特定のページ(URL)をリダイレクトさせる設定をメモしておきます。
方針
「nginx リダイレクト」でググると、rewrite
を使った方法が多くヒットしましたが、正規表現などのオプションを指定しないといけないので多少でも処理が重たくなりそうなのと、return
の方が、よりシンプルにかけそうだったのでそっちにしました。
Nginx の Community にも似たような記載がありました。
Nginx | Pitfalls and Common Mistakes
URLの引数(リクエストパラメータ)も付与してリダイレクトできるようにQuery String
も用います。
やり方
nginxでは、設定ファイル(/etc/nginx/nginx.conf
)に書いてあるかと思います。そこを書き換えてURLをリダイレクトできます。
http://hoge.com//hogehoge.html
で、アクセスが来たら
http://hoge.com//hogihogi.html
に、リダイレクトしたい場合。
1 2 3 |
location ^~ /hogehoge.html { return 301 http://hoge.com/hogihogi.html$query_string; } |
を記述する。conf.dファイル中に入れる場合は下記のようになった。
修正前
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
server { listen 80; server_name hoge.com; location / { root /var/www/html/hoge.com/dest/; index index.html; } access_log /var/log/nginx/hoge.com.access.log; error_log /var/log/nginx/hoge.com.error.log; include modules/gitdir.conf; } |
修正後
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
server { listen 80; server_name hoge.com; location ^~ /hogehoge.html { return 301 http://hoge.com/hogihogi.html$query_string; } location / { root /var/www/html/hoge.com/dest/; index index.html; } access_log /var/log/nginx/hoge.com.access.log; error_log /var/log/nginx/hoge.com.error.log; include modules/gitdir.conf; } |
パラメータが付与されてリダイレクトされてるかの確認
curl コマンド(HTTPアクセスをしてコンテンツを取得できるコマンド)を使ってできます。
パラメータ:?aaa=bbb
$ curl -X GET http://hoge.com/hogehoge.html\?aaa=bbb -I
とすると、以下のレスポンスになる。
1 2 3 4 5 6 7 |
TTP/1.1 301 Moved Permanently Server: nginx/1.8.1 Date: Fri, 10 Nov 2017 05:16:13 GMT Content-Type: text/html Content-Length: 184 Connection: keep-alive Location: http://hoge.com/hogihogi.htmlaaa=bbb |
- hogihogi.htmlにダイレクトされてる
- パラメータが付与されてる
しかし、リダイレクトの設定するだけでも、正規表現やら、ステータスコードやら、Nginxの事とか知っておかなきゃできないことが多いですね。。もし間違ってたら、ご指摘ください!