17

ホームページからWebサイト上の他のURIをライトボックス(AJAX)に開くWebサイトを構築しています。状態の変化を管理するためのフォールバックとして、HTML5プッシュ状態とハッシュバングを使用したいと思います。

今、私はURLをクロール可能にし、Facebookで共有可能/好感を持たせたいと思っています。

ユーザーブラウザがHTML5プッシュ状態をサポートしている場合、問題ありません。URLを共有でき(例http://myserver/example:)、Facebookは静的コンテンツで適切なOGメタを見つけます。

ただし、ユーザーがHTML4ブラウザーを使用している場合は、のようなURLになりますhttp://myserver/#!/example。とにかく彼にFacebookで共有してもらいたい...

これで、Facebookは_escaped_fragment_置換メソッドをサポートしているように見えます。そのため、リクエストをからhttp://myserver/?_escaped_fragment_=/example にリダイレクトするだけhttp://myserver/example で、誰もが満足するはずです…</ p>

だから私は私のhtaccessに書き換え条件を追加しました:

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

私の問題は、Facebookで動作させることができないことです。Facebookのリンターでは、ハッシュバンの後のURLの一部が常にパーセントエスケープ http://myserver/%2Fexampleされ、404に到達するようなURLになります:-(

FacebookをだましてURLのこの部分をエスケープしないようにする方法を知っている人はいますか?apache mod_rewrite側で何かを行うことはできますか?

私は他の有効なajaxクロール可能/好感の持てるURL戦略にもオープンです;)

4

3 に答える 3

18

http://facebook.stackoverflow.com/questions/8896773/opengraph-on-ajax-based-websiteの回答は、これを実現するための非常に優れたアドバイスを提供していると思います。

内容は次のとおりです。


いいえ。OpenGraphマークアップは、純粋なHTTPを使用するGETableであるHTMLページに存在する必要があります。

これは、ユーザーがOGオブジェクトを操作する(アクションを実行するなど)と、FacebookがOGURLに対してHTTPGETを実行し、マークアップでOGタグが返されることを期待するためです。

解決策は、オブジェクトごとに正規のURLを作成することです。これらのURLには、OGタグを含む基本的なHTMLマークアップが含まれています。

これらのURLへのリクエストで、「facebookexternalhit」を含む着信useragent文字列が表示された場合は、HTMLをレンダリングします。そうでない場合は、ajaxURLにリダイレクトする302を提供します。ajax URLでは、いいねボタンと公開するOGアクションは、正規URLオブジェクトを指している必要があります

例:

ユーザーとして、私はhttp://yoursite.com/#!/artists/monetにいます。いいねボタンをクリックするか、アクションを公開しますが、いいねボタンのhrefパラメーター、またはアクションを投稿するときのオブジェクトのURLは、オブジェクトのWebヒット可能な正規URLである必要があります-この場合、おそらくhttp:// yoursite .com / Artists / monet

ブラウザを使用しているユーザーがhttp://yoursite.com/artists/monetにアクセスした場合、それらをhttp://yoursite.com/#!/artists/monetにリダイレクトする必要がありますが、着信ユーザーエージェントがFacebookのスクレーパーであると言った場合は、アーティストのモネを表すマークアップを返すだけです。

実際の例については、このデザインパターンを使用しているDeezer、Rdio、Mogを参照してください。

于 2012-01-17T17:39:57.157 に答える
4

私はphpheader()リダイレクトの使用を終了しました。これは完全に機能します:

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

htaccessの書き換え条件でエスケープ文字を取得した理由がわかりません。

于 2012-01-17T23:46:17.387 に答える
-1

次の構文を使用すると、FacebookでハッシュバンのURLを共有できます: https://stackoverflow.com/a/6138879/372838

于 2012-09-13T10:17:22.330 に答える