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

时间:2012-09-08 13:17:36

标签: php apache .htaccess subdirectory

我有一个名为“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个具有不同配置的共享主机上!

2 个答案:

答案 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方法访问这些文件。