0

我有一个名为“模板”的目录。有一些 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>

这在我的本地主机上效果很好,但是当我在 cPanel 共享主机上上传脚本时,它在那里不起作用。拒绝访问所有 php 文件。

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

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

4

2 回答 2

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]

其中 /includes/ 是您的包含目录。

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

于 2012-09-08T13:31:47.120 回答
0

检查REQUEST_URI每个文件:

$file = basename(__FILE__);
if(preg_match("/$file/", $_SERVER['REQUEST_URI'])){
    die('This file cannot be accessed directly!');
}
于 2012-09-08T13:21:17.570 回答