2012-09-24 34 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),但它会带来很多开销,这可能是不值得的。除非你正在渲染一些分类数据,这是不习惯的。 –

相关问题