我有一个域名(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]
答案 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.com
或http://subdomain.example.com
(HTTP或HTTPS),则阻止请求(403 Forbidden)。
使用L
标志时不需要F
标志 - 暗示。
或者,您也许可以使用JavaScript来检测文档是否包含在框架中,如果没有,则重定向到框架文档。但是,只有当您有一个包含IFRAME的“主”文档时,这才有效。
我只添加了对localhost的访问权限
请求所源自的IP地址与是否从主域的IFRAME中请求子域无关。