2012-01-17 30 views
15

Tôi đang xây dựng một trang web từ trang chủ, tôi sẽ mở một số URI khác trên trang web vào hộp đèn (AJAX) và tôi muốn sử dụng trạng thái đẩy HTML5 và đoạn mã băm làm dự phòng để quản lý thay đổi trạng thái.Làm thế nào để xử lý chia sẻ facebook/như với url băm?

Bây giờ tôi muốn các url được thu thập thông tin và Facebook có thể chia sẻ/dễ thương ..

Nếu trình duyệt sử dụng hỗ trợ nhà nước đẩy HTML5, không có vấn đề, ông có thể chia sẻ URL (ví dụ: http://myserver/example) và Facebook sẽ tìm thấy các metas OG thích hợp trong nội dung tĩnh.

Nhưng nếu người dùng sử dụng trình duyệt HTML4, anh ta sẽ có một url như http://myserver/#!/example. và tôi muốn anh ta để có thể chia sẻ nó qua facebook anyway ...

Bây giờ có vẻ như Facebook hỗ trợ các phương pháp thay thế _escaped_fragment_, vì vậy tôi mặc dù tôi chỉ đơn giản là sẽ chuyển các yêu cầu từ http://myserver/?_escaped_fragment_=/example để http://myserver/example và tất cả mọi người nên được hạnh phúc ...

Vì vậy, tôi đã thêm một điều kiện để viết lại htaccess của tôi:

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=([^&]*) 
RewriteRule .* http://%{HTTP_HOST}/%1? [R=301,L,NE] 

vấn đề của tôi là tôi không thể làm cho nó làm việc với Facebook, với Facebook linter nó có vẻ phần trăm-thoát khỏi tất cả các thời gian phần của UR L sau hashbang, dẫn đến các url giống như http://myserver/%2Fexample có đến 404 :-(

Có ai biết cách lừa Facebook không thoát khỏi phần này của URL không? Tôi có thể làm điều gì đó ở bên mod_rewrite apache không?

Tôi cũng mở cửa cho bất kỳ ajax hợp lệ khác thu thập thông tin/chiến lược URL dễ thương;)

Trả lời

4

tôi đã kết thúc bằng một tiêu đề php() chuyển hướng, mà làm việc một cách hoàn hảo:

if(isset($_GET['_escaped_fragment_'])) { 
    Header("HTTP/1.1 301 Moved Permanently"); 
    header('Location: http://'.$_SERVER['HTTP_HOST'].$_GET['_escaped_fragment_']); 
    die(); 
} 

Tôi không biết lý do tại sao tôi đã thoát khỏi nhân vật khi thực hiện nó với điều kiện htaccess viết lại.

+0

Vui lòng một số chi tiết –

16

Tôi nghĩ câu trả lời tại http://facebook.stackoverflow.com/questions/8896773/opengraph-on-ajax-based-website đưa ra một số lời khuyên thực sự tốt về cách làm cho điều này xảy ra.

Dưới đây là nội dung:


số Graph mở đánh dấu phải có mặt trên các trang HTML mà là GETable với HTTP tinh khiết.

Điều này là do khi người dùng tương tác với đối tượng OG (như, thực hiện tác vụ, v.v.) Facebook sẽ thực hiện HTTP GET trên URL OG và mong đợi xem thẻ OG được trả lại trong đánh dấu.

Giải pháp là tạo URL chuẩn cho từng đối tượng của bạn. Các URL này chứa đánh dấu HTML cơ bản bao gồm các thẻ OG.

Khi có yêu cầu đối với các URL này, nếu bạn thấy chuỗi ký tự người dùng đến chứa 'facebookexternalhit' thì bạn sẽ hiển thị HTML. Nếu không, bạn phục vụ 302 chuyển hướng đến URL ajax của bạn. Trên URL ajax, các nút như bạn và bất kỳ hành động OG bạn xuất bản phải trỏ đến đối tượng URL kinh điển

Ví dụ:

Là một người sử dụng, tôi đang trên http://yoursite.com/#!/artists/monet.Tôi nhấp vào nút tương tự hoặc xuất bản hành động, nhưng thông số href của nút tương tự hoặc URL của đối tượng khi bạn đăng tác vụ phải là URL hợp chuẩn web cho đối tượng - trong trường hợp này, có thể là http://yoursite.com/artists/monet

Khi người dùng sử dụng trình duyệt truy cập http://yoursite.com/artists/monet, bạn nên chuyển hướng họ đến http://yoursite.com/#!/artists/monet, nhưng nếu người dùng đến nói rằng đó là trình thu thập của Facebook, bạn chỉ cần trả lại đánh dấu đại diện cho nghệ sĩ Monet.

Đối với các ví dụ thực tế, hãy xem Deezer, Rdio và Mog, tất cả đều sử dụng mẫu thiết kế này.

+0

Vâng, đó là bởi vì "Open Graph đánh dấu phải có mặt trên các trang HTML mà là GETable với HTTP tinh khiết" mà tôi muốn chuyển hướng facebook để url "thực" "http://yoursite.com/artists/monet. Tôi không thể tìm thấy làm thế nào để chuyển hướng chúng với các quy tắc htaccess, nhưng tôi đã kết thúc làm nó với một vị trí tiêu đề php và nó hoạt động tốt. Bây giờ facebook thấy url sạch sẽ với OG metas khi người dùng muốn chia sẻ url với hashbang. – skiplecariboo

+0

Có bạn đi! Vui mừng được giúp đỡ. – DMCS

+1

Cảm ơn bạn vì lời giải thích tốt! –

Các vấn đề liên quan