Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.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 .htaccess仅允许从包含访问文件_Php_Apache_.htaccess - Fatal编程技术网

Php .htaccess仅允许从包含访问文件

Php .htaccess仅允许从包含访问文件,php,apache,.htaccess,Php,Apache,.htaccess,我的网站上有各种各样的子文件夹,我希望用户不能通过URL访问它们,但同时我的主要PHP文件能够包含它们或将它们用作表单或链接上的操作 我尝试将.htaccess与一起使用 <Files *> Order Allow,Deny Deny from All </Files> 命令允许,拒绝 全盘否定 但它拒绝了所有访问,即使是在我自己的脚本中。我发现这是合乎逻辑的,但我不知道如何使它起作用。有什么想法吗 另外,我主要担心的是,一些文件不包含在主PHP文件

我的网站上有各种各样的子文件夹,我希望用户不能通过URL访问它们,但同时我的主要PHP文件能够包含它们或将它们用作表单或链接上的操作

我尝试将.htaccess与一起使用

<Files *>
    Order Allow,Deny
    Deny from All
</Files>

命令允许,拒绝
全盘否定
但它拒绝了所有访问,即使是在我自己的脚本中。我发现这是合乎逻辑的,但我不知道如何使它起作用。有什么想法吗


另外,我主要担心的是,一些文件不包含在主PHP文件中,但它们链接在那里,它们的代码以
头('Location:../index.PHP')结束返回到项目主页。

通常为了保护这些逻辑文件不被公众访问,您可以

  • 将其放在htdocs上方的受保护目录中
  • 添加对公共常量的检查<代码>如果(!已定义(某些根常量)){die();}
  • 把分机号码改成.inc之类的。。并基于此使用.htaccess拒绝

  • 还有一种更安全的方法。将您的包含文件存储在可通过web访问的文件夹下。所以如果你的网页文件在这里

    /var/www/mysite.com/

    将您的包含文件存储在此处:

    /var/包括/

    然后将它们包含在完整路径中

    include '/var/includes/myincludes.inc.php';
    

    从web上完全无法访问myincludes.inc.php文件。

    将应用程序代码放在公共html文件夹之外。然后,您可以在脚本顶部添加一个include路径,以允许脚本像访问同一文件夹一样访问它们

    请执行以下操作:

    <Files *>
        Order Deny,Allow 
        Allow from 192.168.100.123 127.0.0.1
        Deny from all
    </Files>
    
    
    命令拒绝,允许
    允许从192.168.100.123 127.0.0.1开始
    全盘否定
    
    IP列表将是您允许的特定主机,如localhost


    如果您只想阻止某些目录,这也适用于指令,而不仅仅是文件。

    在您的.htaccess中,您必须指定要允许的IP、主机,并且您还可以按目录执行。例如

    <Directory /dir/to/block>
        Order Allow,Deny
        Allow from 192.168.0.1 4.4.4.4
        Deny from All
    </Directory>
    <Directory /dir/to/allow>
        Order Allow, Deny 
        Allow from All
    </Directory>
    
    
    命令允许,拒绝
    允许从192.168.0.1 4.4.4.4开始
    全盘否定
    命令允许,拒绝
    通融
    
    我看到很多关于允许、拒绝而不是拒绝、允许的答案

    这件事的顺序很重要,是问题的根源。您正在告诉计算机拒绝比允许更重要,因为它列在最后。给你看。。。如果你说:

    <Files .htaccess>
    Order Allow,Deny 
    Deny From All
    Allow From xxx.xxx.xxx.xxx 127.0.0.1
    </Files>
    
    
    命令允许,拒绝
    全盘否定
    允许从xxx.xxx.xxx.xxx 127.0.0.1开始
    
    你是说先允许任何人,然后拒绝所有。。。它仍然否认一切

    如果你反向否定,允许你说的是否定一切,那么允许任何被允许的人

    <Files .htaccess>
    Order Deny,Allow
    Deny From All
    Allow From xxx.xxx.xxx.xxx 127.0.0.1
    </Files>
    
    
    命令拒绝,允许
    全盘否定
    允许从xxx.xxx.xxx.xxx 127.0.0.1开始
    
    更重要的是,Allow命令是最后一个命令,因此它允许在Allow From命令之后列出的命令


    xxx.xxx.xxx.xxx=您的IP

    我用127.0.0.1 Deny from All的命令Allow,Deny Allow尝试过,但是它阻止了从AJAX函数调用的所有文件。当然,因为它们是客户端请求的。你不能“允许客户端”和“不允许客户端”提供文件。这个答案非常有用!有太多的帖子顺序错误!非常感谢。我们需要推动这个。