2017-06-27 177 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