Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.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文件_Php_Apache_.htaccess_Subdirectory - Fatal编程技术网

拒绝访问php文件,但允许子目录中的其他php文件

拒绝访问php文件,但允许子目录中的其他php文件,php,apache,.htaccess,subdirectory,Php,Apache,.htaccess,Subdirectory,我有一个名为“模板”的目录。有些php文件我不想让人们直接访问,所以我在htaccess中写了以下内容: <Files *.php> Order Deny,Allow Deny from all </Files> 这在我的本地主机上运行良好,但当我在cPanel共享主机上上载脚本时,它在那里不起作用。拒绝访问所有php文件 我能做些什么来解决这个问题 我不能要求主机进行更改,因为此脚本应安装在至少30个具有不同配置的共享主机上 检查每个文件中的请求URI

我有一个名为“模板”的目录。有些php文件我不想让人们直接访问,所以我在htaccess中写了以下内容:

<Files *.php>
    Order Deny,Allow
    Deny from all
</Files>
这在我的本地主机上运行良好,但当我在cPanel共享主机上上载脚本时,它在那里不起作用。拒绝访问所有php文件

我能做些什么来解决这个问题


我不能要求主机进行更改,因为此脚本应安装在至少30个具有不同配置的共享主机上

检查每个文件中的
请求URI

$file = basename(__FILE__);
if(preg_match("/$file/", $_SERVER['REQUEST_URI'])){
    die('This file cannot be accessed directly!');
}

如果您有一个包含PHP includes的目录,而您不希望直接从浏览器访问该目录,那么可以使用
Mod_Rewrite
禁用该目录

要启用此功能,请按照主要说明和指南创建
.htaccess
文件,并包含以下文本:

## Enable Mod Rewrite, this is only required once in each .htaccess file
RewriteEngine On
RewriteBase /
## Test for access to includes directory
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /includes/ .*$ [NC]
## Test that file requested has php extension
RewriteCond %{REQUEST_FILENAME} ^.+\.php$
## Forbid Access
RewriteRule .* - [F,NS,L]
其中/includes/是您的includes目录


注意:我强烈建议将您不希望用户直接访问的文件存储在单独的目录/文件夹中。别担心,您可以使用
include
方法访问这些文件。

不要这样做。如果您不想允许访问某些文件,那么根本不要将它们放入文档根目录中。无法访问不存在的内容。。。当然,由于PHP不受Web服务器对文件访问的限制,它仍然可以包含/要求所有文件-您需要的只是包含/要求指令中的适当路径。我要拒绝PHP直接访问的目录是一个模板目录,用户需要访问一些切换器文件。您可以将安全文件保存在子文件夹中。
## Enable Mod Rewrite, this is only required once in each .htaccess file
RewriteEngine On
RewriteBase /
## Test for access to includes directory
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /includes/ .*$ [NC]
## Test that file requested has php extension
RewriteCond %{REQUEST_FILENAME} ^.+\.php$
## Forbid Access
RewriteRule .* - [F,NS,L]