2011-06-13 103 views
2

如何拒絕直接訪問目錄中的文件,我不希望用戶直接訪問它,但允許服務器/本地主機訪問,因爲我試圖避免直接訪問該目錄訪問包含由PHP輸出/解析的HTML文件。拒絕直接訪問除server/localhost之外的文件

目錄的列表如下:

template 
    | 
    | 
    +--------> acp 
    |   | 
    |   +------> acp_index.html 
    |   +------> acp_settings.html 
    | 
    +--------> css 
    |   | 
    |   +------> stylesheet.css 
    | 
    +--------> js 
    |   | 
    |   +------> scripts.js 
    | 
    +---> index.html 
    +---> login.html 
    +---> etc... 

template/acp我需要避免直接訪問文件,但本地主機/服務器應該能夠訪問並解析它。

回答

3

如果我明白了這個權利,您想讓人們遠離template/acp,同時仍然允許服務器訪問這些文件?

你可以做一個.htaccess並將其放置在template/acp,該文件應包含單詞deny from all,就這樣,每個人都試圖獲得該文件將不能夠,但是服務器仍然能夠通過。 PHP或其他服務器端腳本語言...

在PHP中可以使用的功能,如include()require()包括在PHP文件的文件,甚至從包含的文件執行PHP代碼,或讀的東西,如fread()文件或file_get_contents() ...

但是,如果你沒有使用任何服務器端腳本有沒有辦法可以完全避免直接訪問文件,如果你仍然需要用戶能夠看到他們的內容...

請注意,.htaccess不支持所有類型的網絡服務器。 Apachee支持它,而其他像lighttpd不支持。

1

如果您從不需要直接訪問這些文件,並且只從PHP進行解析,那麼將這些文件移出網絡目錄。如果這些文件不在Web目錄中(並且您沒有在Apache中設置別名路徑),那麼有一天某個人無法訪問它們。

PHP不限於網絡目錄,PHP可以訪問服務器中/ tmp,/ etc /目錄中的所有文件(實際上這是一個問題)。 Apache用戶&組可以讀取的每個文件都可以被PHP讀取。

PHP的設置將限制這一點,它的open_basedir的,如果此設置被設定,那麼你可以在open_basedir的caontined目錄的目錄樹opnly訪問文件。所以你可能需要在那裏添加你的模板目錄。

您可能還需要更改include_dir設置以添加您的模板位置並編寫簡化的include_once或require_once指令。