5

ハッシュバン URL を使用して ajax ベースの Web アプリケーションを開発しました。

検索エンジンからの要求を、HTML スナップショットを生成して応答を送信する別のサーバーにリダイレクトしようとしています。以下に示すように、場所ディレクティブを使用してnginxでこれを達成しようとしています:

      location ~ ^(/?_escaped_fragment_=).*$ {
         proxy_set_header        Host $host;
          proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header        X-Forwarded-Proto $scheme;

          client_max_body_size    10m;
          client_body_buffer_size 128k;
          proxy_connect_timeout   60s;
          proxy_send_timeout      90s;
          proxy_read_timeout      90s;
          proxy_buffering         off;
          proxy_temp_file_write_size 64k;
          proxy_pass      http://x1.x2.x3.x4:8080;
          proxy_redirect      off;
      }

しかし、私はこれを機能させることができません。誰かが私が使用している正規表現を修正できますか (または)、これを達成するための代替ソリューションを提供してくれますか?

前もって感謝します。

4

2 に答える 2

5

ロケーション名の引数を確認することはできません ( nginx docs ):

すべてのタイプの場所は、引数なしで要求行の URI 部分のみをテストすることに注意してください。これは、クエリ文字列の引数がいくつかの方法で指定される可能性があるためです。たとえば、次のようになります。

/index.php?user=john&page=1
/index.php?page=1&user=john

サーバーセクションで書き換えルールを設定できます(ここにあります):

if ($args ~ “_escaped_fragment_=(.+)”) {
    set $real_url $1;
    rewrite ^ /crawler$real_url;
}

HTML 生成サーバーにリダイレクトできる「/crawler」の場所を定義します。

于 2012-06-11T19:17:19.550 に答える
1

この問題を次のように解決しました。

if ( $arg__escaped_fragment_ ) {
    return 301 $uri$arg__escaped_fragment_;
}
于 2013-08-06T12:05:55.930 に答える