-1

enter code hereたとえば、apps.facebook.com/myappname/ で Facebook アプリケーションを開発しました。これは、myappname.mydomain.com でホストされる Web アプリケーションです。

Facebook アプリケーションでは、URL ベースだけが異なり、2 番目の部分の URL は同じです。たとえば、次のようになります。

myappname.mydomain.com/home apps.facebook.com/myappname/home

myappname.mydomain.com/product apps.facebook.com/myappname/product

実際の URL ではなく、Facebook の URL だけを表示したいので、htaccess でルール リダイレクトを作成する必要があります。ベース URL だけを apps.facebook.com/myappname/ から myappname.mydomain.com/ に変更するルールを意味します

可能ですか?tx、よろしく

助けを待っています私は解決策に取り組んでおり、おそらくこれはその一部です。htaccessにこのコードを追加しました

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !apps.facebook.com/myappname$ [NC]
RewriteRule ^(.*)$ https://apps.facebook.com/myappname/$1 [L,R=301]

しかし、ご存知のように、Facebook アプリケーションは iframe に似ているため、この方法で含まれているループが開始され、アプリが機能しません。このルールに「url が facebook iframe にない場合」という条件を追加する必要がありますか? TX

4

2 に答える 2

0

2営業日後、これを理解しました.txで返信してください.これは私のjavascriptソリューションです

 <script>
if (parent.location.href == self.location.href) {
    window.location.href = 'https://apps.facebook.com/myappname' + window.location.pathname;
    //alert(window.location.pathname);
}
</script>

PS。送信して MAX!!!

于 2013-01-07T16:46:46.813 に答える
0

RewriteCond %{HTTP_HOST} !apps.facebook.com/myappname$ [NC]

サーバーに到達するリクエストでは、HTTP_HOST が apps.facebook.com に設定されることはないため、これは常に true になります。(そして、URL のパス コンポーネントはドメイン名の一部ではありません…)

この場合、mod_rewrite でできる唯一のことは、HTTP リファラーをチェックすることだと思います。apps.facebook.com 以外の場合は、アプリが FB iframe の外部で呼び出されている可能性があります。(しかし、リファラーがどれほど信頼できないかは、今では常識になっているはずです。)


最善の策は、JavaScript を使用して、アプリが iframe 内で呼び出されているか、それ自体で呼び出されているかを確認することです (iframe 内にある場合は、apps.facebook.com にあると想定します)。

if(top == window) {
  // not in iframe, redirect:
  window.location.href = "{your app’s URL on facebook}";
}

これは、アプリが上部のブラウザー ウィンドウで直接呼び出された場合にのみ起動します。フレーム化されている場合、facebook.com であるかどうかに関係なく、このコードは何もしません。

サーバー構成にヘッダーを追加しX-Frame-Optionsて、アプリが apps.facebook.com の (i) フレームにのみ表示され、他の場所には表示されないようにすることができます。これを JS アプローチと組み合わせると、アプリが「フレーム化」されている場合、apps.facebook.com にあり、他の場所ではないことを確信できます。

于 2013-01-07T11:42:33.907 に答える