2012-04-24 12 views
5

Ho sviluppato un'applicazione web basata su Ajax con hash bang url.Come reindirizzare/gestire le richieste dai motori di ricerca tramite nginx usando la regex della posizione

Sto provando a reindirizzare le richieste dai motori di ricerca a un altro server che genera istantanee HTML e invia la risposta. Sto cercando di raggiungere questo obiettivo in nginx con la direttiva posizione come indicato di seguito:

 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; 
     } 

Ma io non sono in grado di ottenere questo lavoro. Qualcuno può correggere la regex che sto usando (o) fornirmi una soluzione alternativa per raggiungere questo obiettivo.

Grazie in anticipo.

risposta

5

Non è possibile verificare la presenza di argomenti il ​​nome della località (nginx docs):

Nota che le posizioni di tutti i tipi di test solo una parte URI di richiesta linea senza argomenti. Ciò avviene perché argomenti nella stringa di query possono essere dati in diversi modi, ad esempio:

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

si potrebbe configurare una regola di riscrittura nella sezione Server (che si trova here):

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

e definire una posizione "/ crawler", che può essere reindirizzato al server di generazione HTML.

1

Ho risolto questo problema in questo modo:

if ($arg__escaped_fragment_) { 
    return 301 $uri$arg__escaped_fragment_; 
} 
Problemi correlati