2012-04-24 6 views
5

Opracowałem aplikację internetową opartą na języku ajax z hasłami hash bang.Jak przekierować/obsłużyć żądania z wyszukiwarek przez nginx za pomocą regex lokalizacji

Próbuję przekierować żądania z wyszukiwarek na inny serwer, który generuje migawki HTML i wysyła odpowiedź. Próbuję to osiągnąć w nginx z dyrektywą lokalizacyjną, jak wspomniano poniżej:

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

Ale nie jestem w stanie tego zrobić. Czy ktoś może poprawić regex, którego używam (lub) zapewnia mi alternatywne rozwiązanie, aby to osiągnąć.

Z góry dziękuję.

Odpowiedz

5

Nie można sprawdzić argumentów w nazwie lokalizacji (nginx docs):

Uwaga że lokalizacje wszystkich typów testów URI tylko część żądania linii bez argumentów. Dzieje się tak dlatego argumenty w ciągu kwerendy można podać na wiele sposobów, na przykład:

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

Mogłeś setup reguła przepisywania w sekcji serwera (znaleziono here):

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

i zdefiniować „/ gąsienicowy” Location, które mogą być przekierowany do serwera generującego HTML.

1

I rozwiązać ten problem w ten sposób:

if ($arg__escaped_fragment_) { 
    return 301 $uri$arg__escaped_fragment_; 
} 
Powiązane problemy