我对php和web都很陌生,现在我正在学习关于php的oop以及如何将我的程序分成每个.php文件中的类。之前所有我都知道php程序,我可能将这些文件放到我的根文件夹中
因此,每当客户端在浏览器中请求任何内容时
http://www.example.com/resources/myFunctions.php
没问题,文件会将正确的页面输出到客户端。
现在,我有一个问题。我在根文件夹中也有这样的文件
如何通过在浏览器中输入类似内容来阻止用户请求这些文件?
exit;
我一直在考虑的方法是在每个文件的顶部添加此行{{1}}
或者,我知道有一个名为.htaccess的东西,它是一个影响Apache工作方式的Apache配置文件。
现实生活应用程序如何解决此问题?
答案 0 :(得分:2)
您确实可以使用任何可用的服务器端配置选项。
根据托管的设置方式,您可以修改PHP的包含路径(http://php.net/manual/en/ini.core.php#ini.include-path),也可以将各种文档/目录限制为特定的主机/子网/ Apache站点配置中的无访问权限{{{ 3}})。
如果您使用的是共享主机,那么这种级别的锁定通常是不可能的,因此您仍然坚持使用Apache重写规则,结合使用易于处理的文件命名约定(即classFoo.inc) .php和classBar.inc.php),。htaccess文件并使用FilesMatch指令阻止访问* .inc.php - https://httpd.apache.org/docs/2.4/howto/access.html
FWIW所有其他方面都相同,Apache基金会表示在服务器端配置中使用.htaccess更好/更有效。如果您可以使用该选项。
答案 1 :(得分:1)
实际应用程序通常在项目的根目录中使用所谓的public/
或webroot/
文件夹,其中所有要通过Web请求的文件都驻留在该文件夹中。
此.htaccess
文件然后将所有HTTP请求转发到此文件夹,内部URL重写如下:
RewriteRule ^$ webroot/ [L] # match either nothing (www.mydomain.com)
RewriteRule ^(.*)$ webroot/$1 [L] # or anything else (www.mydomain.com/home.php)
.htaccess使用正则表达式来匹配请求URI(主机名后面的URL中的所有内容),并在此示例中以webroot/
为前缀。
www.mydomain.com/home.php
变为www.mydomain.com/webroot/home.php
,
www.mydomain.com/folder/file.php
变为www.mydomain.com/webroot/folder/file.php
注意:这在浏览器的网址中不可见。
如果配置正确,常规HTTP请求将无法访问位于此文件夹之外的所有文件。然而,您的应用程序(您的PHP脚本)仍然可以访问这些私有文件,因为PHP在您的服务器上运行,因此它具有对这些文件的文件系统访问权。