2017-06-27 128 views
0

我有一个域(example.com),我想从这个子域(subdomain.example.com)在iframe中加载一个页面。但我想阻止直接访问与.htaccess子域。所以我用下面的代码编辑了子域中的.htaccess用htaccess阻止子域名。但只有从主域名访问

在那里我只添加了访问本地主机,但它不起作用。它给我的页面错误。我该如何解决这个问题?

RewriteEngine On 

#RewriteCond %{HTTP_HOST} ^(www\.)?subdomain.myurl.com$ 
#--allowed ip(s)--# 
#RewriteCond %{REMOTE_ADDR} !^(127.0.0.1)$ 
#RewriteRule^- [F,L] 

回答

0

你不能可靠地做到这一点与.htaccess。这里的问题是,当浏览器在IFRAME中请求子域的URL时,这实质上也是一个“直接请求” - 来自客户端的直接请求。所以,从服务器的角度来看,很难确定请求是否来自iframe内部。

你可以得到的最接近的是检查HTTP Referer头请求(通过浏览器作为发送),它要求在IFRAME文档时应该设置为example.com。然而,这是不可靠的,可以很容易伪造,并会阻止索引 - 如果这是一个问题。如果用户直接在浏览器的地址栏中键入URL,则不会有HTTP Referer,但同样,Googlebot也不会发送Referer标头。

例如,在子域的根:

RewriteEngine On 
RewriteCond %{HTTP_REFERER} !^https?://(subdomain\.)example\.com 
RewriteRule^- [F] 

如果HTTP引用是开始http://example.comhttp://subdomain.example.com(HTTP或HTTPS),然后阻止请求(403禁止)。

当使用F标志时,不需要标记L - 这是隐含的。

或者,您也许可以使用JavaScript来检测文档是否包含在框架中,如果没有,则重定向到框架文档。但是,只有您拥有包含IFRAME的单个“主”文档时才能使用。

在那里,我已经添加只能访问到本地主机

发出请求发起无关与是否从主域名的IFRAME内被请求的子域的IP地址。

+0

我已经更新了我的答案(代码中的轻微错误)。 – MrWhite