8

現在、次の構成app.example.comapp.newexample.com使用して、アプリのドメインを から に移行していますnginx

server {
    server_name app.example.com;
    location /app/ {
        rewrite ^/app/(.*)$ http://app.newexample.com/$1;
    }
}

ドメイン名の移行をユーザーに通知するために、ポップアップ バナーを表示する必要があります。referrerそして、私はこれを、または何らかの種類の他のヘッダーに基づいて行いたいですapp.newexample.com

rewriteしかし、JavaScriptがそのヘッダーを検出し、そのヘッダーが存在する場合にのみバナーを表示するように、上記に追加のヘッダーを添付するにはどうすれapp.newexample.comばよいですか?

4

4 に答える 4

10

問題は、プロトコルとホスト名を持つURIに「書き換え」ると(つまりhttp://app.newexample.com/、あなたの場合)、Nginxが公正なHTTPリダイレクトを発行することです(コードは301別名「永久リダイレクト」になると思います)。これにより、新しい URL のハンドラーに情報を転送するためのメカニズムが 2 つだけ残ります。

  • クッキー
  • URL自体

ユーザーを新しいドメインにリダイレクトしているため、Cookie は使用できません。しかし、一般的なドメインの場合でも、この種の情報を転送する URL を選択します。

server_name app.example.com;
location /app/ {
    rewrite ^/app/(.*)$ http://app.newexample.com/$1?from_old=yes;
}

これにより、Nginx またはブラウザー (JavaScript を使用) で自由に処理できます。新しいアプリ サーバーの Nginx 構成で JavaScript 用の特別な HTTP ヘッダーを発行して、最初にやりたいことを実行することもできます。

server_name app.newexample.com;
location /app {
  if ($arg_from_old) {
    add_header X-From-Old-Site yes;
  }
}
于 2013-05-15T11:49:16.197 に答える
1

あなたのリダイレクトには、リダイレクトのタイプ/コードが1つ欠けていpermanentます。書き換え行の最後に追加する必要があります。明示的に言及されていない場合、デフォルトのリダイレクトコードが何であるかわかりません。

rewrite ^/app/(.*)$ http://app.newexample.com/$1 permanent;

さらに良い方法は return を使用することです

location /app {
    return 301 $scheme://app.newexample.com$request_uri;
}

上記のように get パラメータを追加することも信頼できる方法です。セッション ( flash ) を簡単に設定し、追加された get パラメータを削除した後にページ自体に再度リダイレクトできます。

編集: リダイレクトはリファラー ヘッダーを送信しません。古いドメインがまだ機能している場合は、ヘッダー呼び出しでリダイレクトを行う単純な php ファイルを配置できます。

header("Location: http://app.newexample.com")
于 2013-05-18T08:19:17.967 に答える