2012-09-24 35 views
1

我的域中有很多文件夾和子文件夾。我想避免直接訪問特定子文件夾中的文件類型html/jpg/gif/etc,但我希望它可以通過index.php頁面訪問。阻止直接訪問文件到子文件夾,但允許用htacess索引頁面

結構是這樣的:

  • www.domain.com/folder1
  • www.domain.com/folder2
  • www.domain.com/folder2/subfolder1
  • WWW。 domain.com/folder2/subfolder2
  • www.domain.com/folder2/subfolder2/index.php
  • www.domain.com/folder2/subfolder2/page1.html
  • www.domain.com/folder2/subfolder2/page2.html
  • www.domain.com/folder2/subfolder2/images /1.jpg
  • www.domain.com/folder2/subfolder2/images/2.jpg

我tryed把page1.html,page2.html和圖像的所謂的新文件夾,文件夾裏面blocked_content

  • www.domain.com/folder2/subfolder2/index.php
  • www.domain.com/folder2/subfolder2/ blocked_content /page1.html

和在blocked_content文件夾中添加了一個帶有deny from allOrder Deny,Allow Deny from all的.htaccess。它阻止了所有,甚至index.php無法訪問這裏面的文件。 index.php文件只有簡單的鏈接,<a href="blocked_content/page1.html">

Tryed上的.htaccess這個配置:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.com [NC] 
RewriteRule \.(swf|pdf|css|gif|png|jpg|html|htm)$ - [F] 

並把它裏面subfolder2並沒有得到效果。

Tryed這個配置上的.htaccess:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.com/folder2/subfolder2 [NC] 
RewriteRule \.(swf|pdf|css|gif|png|jpg|html|htm)$ - [F] 

我把它裏面subfolder2:沒有效果。我把它放在根目錄下,它阻止了所有其他文件夾。

我搜索了很多。我被困住了。我究竟做錯了什麼?把htacess放在錯誤的地方或者冒充添加東西?如果可能的話,我想通過.htacess來做到這一點。包含php會話到所有HTML文件將無法正常工作,因爲我無法更改文件名。

+0

我是否正確理解您希望阻止所有請求,但只有'index.php',並且只有在index.php網站在瀏覽器中呈現並且瀏覽器請求內容時才返回其他資源?如果是這樣的話,它不能完成(至少不安全)。用戶可以隨時更改任何可能檢查的標題。 –

+0

我找到了一種方法,以我想要的方式做我想做的事。找到一個工具來生成.htaccess文件,它的工作!但用戶如何更改標題Mikulas?哪種方式是安全的方式? – Leo

+1

如果是這樣,請將解決方案作爲答案發布在Stack Overflow上或者關閉該問題。更改標題可以通過創建自定義請求來完成,例如'curl'(http://curl.haxx.se/)。 –

回答

1

找到了解決問題的方法。

使用Web工具生成這個。本網站中的htaccess PREVENT HOTLINKING OF IMAGES – HOW TO HOTLINK PROTECT

將.htaccess放入我的blocked_content/文件夾中。

我的域中的index.php可以訪問到此文件夾中的所有內容,但用戶無法在瀏覽器上鍵入url作爲熱鏈接。例如:www.domain.com/folder2/subfolder2/blocked_content/images/1.jpg

到老一個新的.htaccess

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?domain.com [NC] 
RewriteRule \.(swf|pdf|css|gif|png|jpg|html|htm)$ - [NC,F,L] 

之間的區別:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.com [NC] 
RewriteRule \.(swf|pdf|css|gif|png|jpg|html|htm)$ - [F] 

PS:@Mikulas Dite告訴我,它可能不如我希望的那麼安全。

+0

關於不安全:http://en.wikipedia.org/wiki/Referer_spoofing –

+0

偉大的參考! 如果我能夠做到這一點,將是一個最安全的方式保護每個文件與PHP會話? – Leo

+0

它肯定會(只要你在Cookie中存儲SID並且在你的網站上沒有XSS),但它會帶來很多開銷,這可能是不值得的。除非你正在渲染一些分類數據,這是不習慣的。 –

相關問題