2012-04-24 1 views
5

Я разработал веб-приложение на основе ajax с URL-адресами хеш-банга.Как перенаправить/обработать запросы из поисковых систем через nginx с использованием местоположения regex

Я пытаюсь перенаправить запросы от поисковых систем на другой сервер, который генерирует моментальные снимки 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; 
     } 

Но я не могу получить эту работу. Может кто-то исправить регулярное выражение, которое я использую (или) предоставить мне альтернативное решение для достижения этого.

Заранее спасибо.

ответ

5

Вы не можете проверить аргументы в названии местонахождения (nginx docs):

Следует отметить, что расположение всех типов теста только URI часть строки запроса без аргументов. Это делается потому, что аргументы в строке запроса могут быть даны несколькими способами, например:

/index.php?user=john & страница = 1
/index.php?page=1 & пользователя = джон

Вы можете настроить правило перезаписи в разделе сервера (найдено here):

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

и определить «/ гусеничный» местоположение, которое может быть перенаправлен на ваш генерирующего HTML-сервер.

1

Я решил эту проблему следующим образом:

if ($arg__escaped_fragment_) { 
    return 301 $uri$arg__escaped_fragment_; 
} 
Смежные вопросы