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]
としてアクセス禁止にしてみた。
さて、これでどうなるやら、再度しばらく様子見です。
(※一番下に追記あり)
-------------------------
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]
としてアクセス禁止にしてみた。
さて、これでどうなるやら、再度しばらく様子見です。