2012-09-08 129 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

您可以將安全文件保存在那裏的子文件夾中。 –

相關問題