我有一个名为“template”的目录。有些php文件我不希望人们直接访问它们,所以我在htaccess中写了这个:
<Files *.php>
Order Deny,Allow
Deny from all
</Files>
还有一些我希望人们可以直接访问它们的文件,这些文件命名为:
switcher.php,switcher1.php,switcher2.php,switcher3.php,switcher4.php,switcher5.php
位于template/styles/theme/
所以我在那个位置创建了一个新的htaccess文件并写了这个:
<FilesMatch "^switcher[1-5]?\.php$">
Order Allow,Deny
Allow from all
</FilesMatch>
这在我的localhost上运行良好,但是当我在cPanel共享主机上上传脚本时,它在那里不起作用。访问所有被拒绝的php文件。
我该怎么做才能解决这个问题?
我不能要求托管进行更改,因为此脚本应安装在至少30个具有不同配置的共享主机上!
答案 0 :(得分:0)
检查每个文件中的REQUEST_URI
:
$file = basename(__FILE__);
if(preg_match("/$file/", $_SERVER['REQUEST_URI'])){
die('This file cannot be accessed directly!');
}
答案 1 :(得分:0)
如果您有一个包含PHP的目录,您不希望直接从浏览器访问,则可以使用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]
where / includes /是您的包含目录。
注意:我强烈建议您将不希望用户直接访问的文件存储在单独的目录/文件夹中。不用担心,您可以使用include
方法访问这些文件。