如何保护服务器上的php文件不被请求

如何保护服务器上的php文件不被请求,php,apache,.htaccess,Php,Apache,.htaccess,我对php和web非常陌生,现在我正在学习php中的oop以及如何在.php文件中将我的程序划分为各个类。在此之前,我对php程序的所有了解都是为了将这些文件保存到我的根文件夹中 home.php 关于.php products.php contact.php 因此,每当客户机在浏览器中请求其中任何一项时 http://www.example.com/home.php http://www.example.com/about.php http://www.example.com/products

我对php和web非常陌生,现在我正在学习php中的oop以及如何在.php文件中将我的程序划分为各个类。在此之前,我对php程序的所有了解都是为了将这些文件保存到我的根文件夹中

  • home.php
  • 关于.php
  • products.php
  • contact.php
  • 因此,每当客户机在浏览器中请求其中任何一项时

    http://www.example.com/home.php
    http://www.example.com/about.php
    http://www.example.com/products.php
    http://www.example.com/contact.php
    
    没问题,这些文件将向客户端输出正确的页面

    现在,我有个问题。我在根文件夹中也有类似的文件

  • class1.php
  • class2.php
  • 参考资料/myFunctions.php
  • resources/otherFunctions.php
  • 如何通过在浏览器中键入类似的内容来防止用户请求这些文件

     http://www.example.com/resources/myFunctions.php
    
    我一直在思考的方法是在每个文件的顶部添加这一行
    exit

    或者,我知道有一个叫做.htaccess的东西,它是一个影响Apache工作方式的Apache配置文件


    现实生活中的应用程序如何解决这个问题?

    您确实可以使用任何可用的服务器端配置选项

    根据主机的设置方式,您可以修改PHP()的include路径,也可以在Apache站点配置()中将各种文档/目录限制为特定的主机/子网/无访问权限

    如果您使用的是共享主机,那么这种级别的锁定通常是不可能的,因此您必须使用Apache重写规则,结合使用易于处理的文件命名约定(即classFoo.inc.php和classBar.inc.php)、.htaccess文件和使用FilesMatch指令来阻止对*.inc.php的访问


    FAWW:Apache基金会表示,如果您可以使用该选项,在服务器端配置与使用.HTAccess中更好/更有效。

    < P>实际应用程序通常使用所谓的“代码>公有/ < /代码>或<代码> WebOOT/<代码>文件夹,在该项目的根目录中,通过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

    注意:这在浏览器的url中不可见


    如果配置正确,则常规HTTP请求无法访问此文件夹之外的所有文件。但是,您的应用程序(您的php脚本)仍然可以访问这些私有文件,因为php在您的服务器上运行,所以它可以通过文件系统访问这些文件。

    只需将它们放在公共文件夹之外即可。另外,如果你把
    退出在顶部,脚本将停止,并且它不会做任何事情。如果它们只是类定义,则无论哪种方式都无关紧要。用户只会看到一个空白页。:)@谢谢你。你是说当我要买我的第一台主机时,他们会给我“公共”文件夹和“私人”文件夹吗?@georoot谢谢。是的,但知道任何人都可以获得私人文件,即使在屏幕上看不到任何东西,这让我感到不舒服。至少他会知道我在服务器上的文件名:(@accountaryم是的,
    public_html
    文件夹之外的任何东西都不能直接访问。