在htaccess重定向网址遵循规则

时间:2013-01-04 23:16:12

标签: facebook .htaccess redirect

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网址,而不是真正的网址因此我需要在htaccess中创建规则重定向。我的意思是一个规则,它只是将基本网址从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,所以以这种方式启动一个包含的循环我的应用程序不起作用。我需要添加条件这个规则,“当网址不在Facebook iframe”有想法? TX

2 个答案:

答案 0 :(得分:0)

  

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

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

在这种情况下你唯一可以用mod_rewrite做的就是检查HTTP Referer,我猜 - 如果它不是apps.facebook.com,那么你的app很可能在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)框架中,而不是其他任何地方。如果你将它与J​​S方法结合起来,你可以非常肯定,如果你的应用程序被“框架化”,它就在apps.facebook.com而不是其他地方。

答案 1 :(得分: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 !!!