2012-04-24 22 views
5

Tôi đã phát triển một ứng dụng web dựa trên ajax với các url băm.Làm cách nào để chuyển hướng/xử lý các yêu cầu từ các công cụ tìm kiếm qua nginx bằng cách sử dụng vị trí regex

Tôi đang cố gắng chuyển hướng các yêu cầu từ công cụ tìm kiếm đến máy chủ khác tạo ảnh chụp nhanh HTML và gửi phản hồi. Tôi đang cố gắng đạt được điều này trong nginx với chỉ thị vị trí như được đề cập bên dưới:

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

Nhưng tôi không thể làm việc này. Ai đó có thể sửa regex tôi đang sử dụng (hoặc) cung cấp cho tôi một giải pháp thay thế để đạt được điều này.

Xin cảm ơn trước.

Trả lời

5

Bạn không thể kiểm tra cho các đối số trong tên vị trí (nginx docs):

Lưu ý rằng vị trí của tất cả các loại bài kiểm tra chỉ là một phần URI của dòng yêu cầu không có đối số. Này được thực hiện bởi vì đối số trong chuỗi truy vấn có thể được đưa ra theo nhiều cách, ví dụ:

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

bạn có thể thiết lập một quy tắc viết lại trong phần máy chủ (tìm thấy here):

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

và xác định một "/ bánh xích" vị trí, có thể được chuyển đến máy chủ tạo ra HTML của bạn.

1

tôi giải quyết vấn đề này theo cách này:

if ($arg__escaped_fragment_) { 
    return 301 $uri$arg__escaped_fragment_; 
} 
Các vấn đề liên quan