facebookの「いいね!」ボタンのバグ。fb_xd_fragment 対処法 | ~/techlog/

facebookの「いいね!」ボタンのバグ。fb_xd_fragment 対処法

●結論から書くとやったのがコレ。
(※一番下に追記あり)
-------------------------
RewriteEngine on
RewriteCond %{QUERY_STRING} parapara1=(.*)&fb_xd_fragment$ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI}?parapara1=%1 [L,R=301]
-------------------------

●能書きと解説

会社のWebデザイン担当がサイトに facebookの「いいね!」ボタンを貼りやがった。
するとその日から Apacheのログを見てたら

http://hogehoge.com/fugafuga/?parapara1=999
というURI が正しいはずなのに
http://hogehoge.com/fugafuga/?parapara1=999&fb_xd_fragment

っていう余計なパラメータが付いたGETのURLリクエストがパネェ~数で来るようになった。
アクセスログが fb_xd_fragment だらけ。
パネェ。ぱねぇ。

どうやら色々調べてみるとIE6で「いいね!」ボタンがあるページを見た時に稀に発生するらしい。
で対処法がWebデザイナ向けのものが多く参考にならない。
(後述: その後ログを見てたら IE7 もあった・・・)

さらに色々調べてみたら Apache で mod_rewrite を使う方法があったので試してみた。
が、うまくいかない。

うちの会社の環境の場合は上記の通りで
fb_xd_fragment っていうfacebookの余計なパラメータは削除をしたいが、
その他のパラメータはそのまま残しておきたい。

という訳で色々試行錯誤して、mod_rewrite で大きな勘違いに初めて気が付いた。
RewriteEngine on ってやったら、RewriteEngine off も必要かと思ってた。
んな訳ないよね。良く考えればわかるじゃん。設定ファイルってApacheの起動時に
読み込まれるんだから、設定を on にしとかなきゃダメじゃん。

ってことで出来た設定がこれ

-------------------------
RewriteEngine on
RewriteCond %{QUERY_STRING} parapara1=(.*)&fb_xd_fragment$ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI}?parapara1=%1 [L,R=301]
-------------------------

RewriteCond で
QUERY_STRING が parapara1=(.*)&fb_xd_fragment$ の時に
って条件を設定して、
RewriteRule で
REQUEST_URI の後ろに parapara1=%1 (%1 は RewriteCond での最初の括弧グループ((.*)に相当)
と置き換える形で設定。

これで一応正しいページへのアクセスに置き換えることは出来た。


けどこれで
google Analyticsとかでの通常ページへのアクセスが正常にカウントされるのか?
とか
Apacheのアクセスログはどうなるのか??は不明。


とりあえずこれで様子を見てみる。



●※追記(2012/01/26)

しばらく様子を見てみたら fb_xd_fragment のパラメータを外してリライトした先のページにも
facebook のボタンがあったので、現象発生時にはループを起こしたようで、
ページ閲覧者から 「ページが重い!!」 とクレームをもらってしまった(笑)。

まぁよく考えてみりゃ、そりゃそうだわなww。
と言う訳で、fb_xd_fragment が付いてきたURI については

RewriteRule ^(.*)$ - [F,L]

としてアクセス禁止にしてみた。
さて、これでどうなるやら、再度しばらく様子見です。