使用htaccess阻止子域。但只能从主域

时间:2017-06-27 07:56:56

标签: .htaccess mod-rewrite

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

我只添加了对localhost的访问权限,但它不起作用。它给了我页面错误。我该如何解决这个问题?

RewriteEngine On

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

1 个答案:

答案 0 :(得分: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 Referer 启动http://example.comhttp://subdomain.example.com(HTTP或HTTPS),则阻止请求(403 Forbidden)。

使用L标志时不需要F标志 - 暗示。

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

  

我只添加了对localhost的访问权限

请求所源自的IP地址与是否从主域的IFRAME中请求子域无关。