保护某些文件和文件夹不在公用文件夹中查看

时间:2014-07-12 20:00:13

标签: php html apache .htaccess

今天我一直在努力解决这个问题。 我想要完成的是我需要阻止所有用户访问某些php文件和图像以及更多内容(它们位于单独的文件夹中)。

我正在使用WAMP服务器。

我不希望用户能够访问该网站,例如" www / images / crazy-cat-picture.jpg" (或更像是" www / phpScripts / sign-up-user.php") 但我仍然希望用户能够在我的网站上看到图片并调用php脚本。

我尝试了3种不同的方式,但没有一种方法能够正常运作。

1:将文件夹放在www目录

之外

这不起作用,因为php和html页面无法找到数据而且根本不会显示它。

2: .htaccess文件,我在这里写道:

Deny from all
Allow from 127.0.0.1
Allow from 192.168

这不起作用,因为它完全阻止了访问,并且用户即使在单独的网站上也无法查看内容。

3: .htaccess文件,我写了这个:

IndexIgnore *

这将删除标准,而不是显示文件夹,它将用户放置到index.php,然后我将此文件重定向到错误403页面,这非常好。 但问题在于,如果用户拥有整条路径,用户仍然可以访问数据,例如" www / images / crazy-cat-picture.jpg"

然后我一直在考虑在我的所有php脚本文件和用户上传的图片上创建复杂的名称,这将使得很难找到图像和文件。但我想知道是否有更好的方法可以做到这一点,比如阻止特定文件夹中的所有内容,如果用户没有从我的某个网站调用它。

问题是:有人知道如何让我无法在文件夹中找到内容但仍能让用户在我的网站上使用它吗?

很抱歉这篇文章很长,但我希望有人可以回答我的问题。 谢谢!

1 个答案:

答案 0 :(得分:1)

仅保护某些文件和文件夹

1st solution

下一个示例显示如何保护两个.php文件,两个文件夹和两个.jpg图像。其他一切都应该仍然可以访问。

Create an .htaccess file并将其置于受保护资产

的文件夹中
# .htaccess
<FilesMatch ^((001|002)\.php$|folder-001|folder-002|(image-001|image-002)\.jpg)$>
    AuthUserFile /absolute-path-to-the-password-file/.htpasswd
    AuthName "Private Area"
    AuthType Basic
    Require valid-user
</FilesMatch>

然后创建加密密码 - 使用此网站htpasswd generator

Create an .htpasswd并将其放在public_html文件夹之外。它包含从上述服务生成的用户名和密码。

# .htpasswd
username:j9mKJ6TCrsbSk

如您所见,上述文件将受密码保护

2nd solution

您也可以使用下一个解决方案

# .htaccess
<FilesMatch ^((001|002)\.php$|folder-001|folder-002|(image-001|image-002)\.jpg)$>
    Deny from all
</FilesMatch>

此解决方案不需要.htpasswd部分,但FilesMatch指令中列出的文件对任何人都无法访问。


在Debian 7 / Apache 2上测试