2012-09-08 97 views
0

我有一个名为“template”的目录。还有,我不希望人们有他们直接访问一些PHP文件,所以我在htaccess的写了这个:拒绝访问php文件,但允许子目录中的其他php文件

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

+1

不要这样做。如果您不想允许访问某些文件,则不要将它们放入文档根目录。不能访问那里没有的东西......当然,由于PHP不受网络服务器对文件访问的限制,它仍然可以包含/需要这些文件 - 它只需要一个适当的路径包括/需要指令。 –

回答

0

检查每个文件REQUEST_URI

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

谢谢,但它不适合我! –

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] 

凡/包括/是你的包括目录。

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

+0

我想拒绝直接php访问的目录,是一个模板目录,并且有一些切换程序文件需要用户访问。 –

+0

您可以将安全文件保存在那里的子文件夹中。 –

相关问题