拒绝访问php文件,但允许子目录中的其他php文件
我有一个名为“模板”的目录。有些php文件我不想让人们直接访问,所以我在htaccess中写了以下内容:拒绝访问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
<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]