Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使文件仅可供php访问_Php_Apache2_Privileges_Access Control - Fatal编程技术网

使文件仅可供php访问

使文件仅可供php访问,php,apache2,privileges,access-control,Php,Apache2,Privileges,Access Control,我想让特定目录中的文件只供php访问,具体情况是,我有一个文件夹,其中包含一些子文件夹,每个子文件夹包含很多文件(可以是各种类型的文件,如图像、代码、可执行文件等)。现在,我构建了一个脚本,可以下载文件,这很有效,但也可以转到server.com/folder/subfolder/img.jpg查看图像。这是我不想允许的 我有什么办法可以做到这一点吗 附言:我正在运行一个带有apache2和PHP7的Ubuntu 14.04服务器 编辑:问题可能与链接的问题重复,但没有答案对我有效。htacce

我想让特定目录中的文件只供php访问,具体情况是,我有一个文件夹,其中包含一些子文件夹,每个子文件夹包含很多文件(可以是各种类型的文件,如图像、代码、可执行文件等)。现在,我构建了一个脚本,可以下载文件,这很有效,但也可以转到
server.com/folder/subfolder/img.jpg
查看图像。这是我不想允许的

我有什么办法可以做到这一点吗

附言:我正在运行一个带有apache2和PHP7的Ubuntu 14.04服务器


编辑:问题可能与链接的问题重复,但没有答案对我有效。htaccess不会更改任何内容,文件夹应保留在原处。

如果要使用文件系统解决此问题,您必须认识到您在系统方面存在一些重大限制。例如,您的PHP脚本不能与Apache以同一用户身份运行,因此不能在Apache中运行


如果这是一个硬性要求,那么我要做的第一件事就是通过fcgi守护程序而不是web服务器运行PHP脚本,让它作为单独的用户运行,并相应地收紧文件权限。

这将实现以下目的:

RewriteEngine On
RewriteBase /yourwebsite/

RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=302]

RewriteRule ^((?!public/).*)$ public/$1 [L,NC]

ErrorDocument 404 /yourwebsite/404.php

把它放在你的.htaccess中,当有人访问你的网站时,他们只会看到公用文件夹中的内容,但公用文件夹之外的所有内容仍然可以通过php访问。只有图像和css必须在公用文件夹中,否则用户无法看到它,因为他没有权限错误的方法。这样的问题不能通过文件系统内部权限处理来解决,这是不可能的。相反,您使用“路由器脚本”来处理对任何此类文件的请求,而文件本身根本无法通过直接http请求访问。它们存储在已发布文件树部分的外部。路由脚本可以使用您希望授权请求的任何策略,然后通过先发送适当的http头,然后发送文件内容本身来“分发”文件。@arkascha为什么带有“拒绝来自所有人”的.htaccess文件不起作用呢?当然可以,尽管您必须再次对某些文件实施异常。但我不认为这是一个安全或优雅的解决方案。它将应用程序逻辑扩展到设置中的不同级别,并要求所有组件完美地协同工作。如果没有,您就有安全或数据漏洞
.htaccess
风格的文件是出了名的容易出错、难以调试的文件,而且它们确实会降低http服务器的运行速度。而在路由脚本中,您可以使用脚本语言赋予您的所有灵活性。日志记录、修改、一种或多种方法,…@arkascha,因此您认为我可以将文件夹及其子文件夹和文件移动到浏览器无法访问的另一个文件夹中(因此使用
/var
而不是
/var/www