Linux nginxでリダイレクトするとPOST処理ができなくなる

linux

状況説明

※Apacheも同じになるかは調べてないです。すいませんm(_ _)mまぁ応答コードの話なので同じになるんじゃないのかな。

nginxのリダイレクト設定(※だいぶ省略してます)

  server_name  www.piteki-old.jp;
  location / {
    return 301 https://www.piteki.com$request_uri;
  }

上記のような感じで古いサイトから新しいサイトへ更新したようなケース。通常の閲覧は問題ありません。ただ、この古いドメインへのアクセスでメソッドがPOSTの場合だと、GETに変更されてエラーとなってしまう。ログはこんな感じ

古いドメイン側のログ

192.168.0.1 - - [01/Dec/2021:17:43:47 +0900] "POST /hoge/upload HTTP/1.1" 301 162 

新しいドメイン側のログ

192.168.0.1 - - [01/Dec/2021:17:43:47 +0900] "GET /hoge/upload HTTP/1.1" 400 5 

メソッドが変わって400エラーになってる。。。調べてみると、

301:GETメソッドは変更しません。他のメソッドに変更されるかもしれません。

「かも」ってwww
まぁ事実、うちの環境では変わっちゃってるっていうね

対応

応答コードを301から変更する

307:メソッドと本文は変更しません。(一時的)
308:メソッドと本文は変更しません。(恒久的)

nginxの設定変更

  server_name  www.piteki-old.jp;
  location / {
    return 308 https://www.piteki.com$request_uri;
  }

nginx.conf再読み込みして、再度アクセス

古いドメイン側のログ

192.168.0.1 - - [02/Dec/2021:14:41:27 +0900] "POST /hoge/upload HTTP/1.1" 308 164 

新しいドメイン側のログ

192.168.0.1 - - [02/Dec/2021:14:41:27 +0900] "POST /hoge/upload HTTP/1.1" 200 145214 

治ったー。コンテンツ側でも問題なくなったことを確認してもらった。

コメント