2011-11-09 22 views
6

Xin chào các nhà phát triển đồng nghiệp!AJAX có thể thu thập dữ liệu với _escaped_fragment_ trong htaccess

Chúng tôi sắp hoàn thành giai đoạn đầu tiên của ứng dụng web ajax của chúng tôi. Trong ứng dụng của chúng tôi, chúng tôi đang sử dụng mảnh băm như:

http://ourdomain.com/#!list=last_ads&order=date 

Tôi hiểu google sẽ tìm nạp url này và thực hiện một yêu cầu đến máy chủ theo hình thức này:

http://ourdomain.com/?_escaped_fragment_=list=last_ads?order=date&direction=desc 

mọi thứ đều hoàn hảo, ngoại trừ .. .

tôi muốn tuyến đường loại này yêu cầu kịch bản khác

như vậy:

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$ 
RewriteRule ^$ /webroot/crawler.php$1 [L] 

Vấn đề là, khi tôi cố gắng print_r ($ _ REQUEST) trong crawler.php tôi chỉ nhận được:

Array 
(
    [_escaped_fragment_] => list=last_ads?order=date 
    [direction] => desc 
) 

những gì tôi muốn nhận được là

Array 
(
    [list] => last_ads 
    [order] => date 
    [directions] => des 
) 

Tôi biết tôi có thể sử dụng php để tiếp tục phá vỡ đối số đầu tiên, nhưng tôi không muốn;)

vui lòng thông báo

================================================ ==== CHỈNH SỬA ... một số sửa đổi trong văn bản và logic

Trả lời

3

quên chỉ thị QSA của bạn (tất cả mọi người bị mất điểm = D)

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$ 
RewriteRule ^$ /webroot/crawler.php%1 [QSA,L] 

Bằng cách này $1 của bạn là tốt err ... vô dụng bởi vì nó đề cập đến không có gì. Vì vậy, điều này nên là:

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$ 
RewriteRule ^$ /webroot/crawler.php [QSA,L] 

Hãy cho tôi biết điều này có hiệu quả không.

+0

Tôi nghĩ rằng nó phải là '% 1' thay vì '$ 1' http://stackoverflow.com/questions/6654834/difference-between-1-vs-1-in-htaccess – HerrSerker

+0

Bạn nói đúng. Sửa chữa, cảm ơn bạn! –

+1

Sau đó, bạn cũng nên bỏ chú thích đó về $ 1. – HerrSerker

1

Nếu tôi không nhầm.

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$ 
RewriteRule ^$ /webroot/crawler.php?%1 [L] 
+0

tốt hơn nếu trong crawler.php thêm nó print_r ($ _ GET); đầu ra sẽ là một mảng [Array ([order] => date ....)] không phải chuỗi như trong các ví dụ khác – user956584

1

lẽ là rõ ràng cho bạn, nhưng trong cuộc nói chuyện tài liệu về nhân vật thoát: Set up your server to handle requests for URLs that contain

Crawler thoát nhân vật nào đó trong đoạn trong việc chuyển đổi. Để truy xuất đoạn ban đầu, hãy đảm bảo không hiển thị tất cả% XX ký tự trong đoạn. Cụ thể hơn,% 26 sẽ trở thành &,% 20 sẽ trở thành không gian,% 23 sẽ trở thành # và% 25 sẽ trở thành%, v.v.

+0

Tôi có một số vấn đề phù thủy "& 26" vì vậy tôi viết sửa chữa đơn giản: if (strstr ($ _ SERVER [ 'QUERY_STRING'], '% 26')): $ _SERVER ['QUERY_STRING'] = urldecode ($ _ SERVER ['QUERY_STRING']); parse_str ($ _ SERVER ['QUERY_STRING'], $ _GET); endif; – user956584

0

Đây là giải pháp cung cấp thông số URL và thông số truy vấn có thể định tuyến được đặt chính xác để xử lý trong tập lệnh phía máy chủ.

Ví dụ: Nếu bạn muốn http://yoursite.com/#!/product/20 để trở thành http://yoursite.com/crawler/product/20

đầu tiên trong .htaccess

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$ 
RewriteRule ^$ /crawler/index.php?_frag=%1 [L] 

Chúng ta cần phải thoát khỏi _escaped_fragment_ trong URL và thay thế bằng một cái gì đó khác nhau, ví dụ: _frag nên rằng máy chủ web (Apache) không nhận được để viết lại vòng tròn.

Thứ hai trong crawler/index.php

<?php 

if(array_key_exists('_frag', $_REQUEST)) { 
    $_SERVER['REQUEST_URI']=$_REQUEST['_frag']; 
    unset($_REQUEST['_frag']); 
    parse_str($_SERVER['QUERY_STRING'], $frag); 
    parse_str(preg_replace('/^.*\?/', '', $frag['_frag']), $_REQUEST); 
    $_SERVER['QUERY_STRING'] = http_build_query($_REQUEST); 
} 

// Continue with your usual script of routing 
// $_REQUEST now contains the original query parameters 
0

Trong tác phẩm htacess trong máy chủ ảo không làm việc, vì vậy tôi thêm vào "thư mục"

<Directory "X:/DIR"> 
    RewriteEngine On 
    RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$ 
    RewriteRule ^$ /crawler/index.php?_frag=%1 [L] 
</Directory> 
Các vấn đề liên quan