-1

enter code here例如,我在apps.facebook.com/myappname/ 上开发了一个facebook 应用程序,它是myappname.mydomain.com 上的一个Web 应用程序主机。

在 facebook 应用程序中只是 url base 不同,第二部分 url 是相同的,例如:

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

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

我只想显示 facebook url,而不是真正的 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 中时”有想法吗?发送

4

2 回答 2

0

两个工作日后,我明白了,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。TX 到 MAX !!!

于 2013-01-07T16:46:46.813 回答
0

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

这始终是正确的,因为到达您的服务器的请求永远不会将 HTTP_HOST 设置为 apps.facebook.com。(并且 URL 的路径部分不是域名的一部分……)

在这种情况下,您可以使用 mod_rewrite 做的唯一一件事就是检查 HTTP 引荐来源网址,我猜——如果它不是 apps.facebook.com,那么您的应用很可能在 FB iframe 之外被调用。(但是referer的不可靠程度,现在应该是常识了。)


最好的办法是使用 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 回答