2011-12-11 63 views
1

可能重複:
How to hinder PHP files to Global Access執行腳本,而不是讓用戶訪問它

對於一個項目我的工作,我需要( 「xxxx.php」);將我網站的某些部分加入我的網站。

例如,我有header.php,我的網站只是使用一個簡單的require(「header.php」)向全世界顯示。

現在,我該如何使它所以頁面包括header.php中的內容,但要因此用戶無法通過

http://mywebsite.com/header.php

+0

我更喜歡[這個答案](http://stackoverflow.com/a/6796718/451969)重複的問題。將文件從Web可訪問路徑中移出,或者使其所在的目錄需要進行身份驗證。 –

+0

您應該指定您使用的是哪個Web服務器。多數人認爲阿帕奇,但情況可能並非如此。 –

+0

我目前正在使用本地主機服務器(XAMPP),所以我實際上使用Apache。 – InVert

回答

4

訪問它把文件某處的DocumentRoot的外網絡服務器。

+0

有時,使用共享主機時,您的主機不會爲您提供DocumentRoot外部的目錄。如果是這種情況,你可以使用'.htaccess' - 我在我的答案中加入了一個例子。 – middus

3

設置網絡服務器,以便:

  1. 你有一個公共目錄,其中可訪問的文件駐留,說靜止媒體+的index.php等

  2. 有一個資源目錄,即在您的公共文件夾之外。

  3. 設置Web服務器從公共目錄服務

  4. 包括像這樣:

    要求( 「../私人/ header.php文件」);

3

你可以在你的索引文件定義常量,然後在header.php你會檢查所以這個常數存在。

// check if the header.php file is accessed directly 
if (!define('MY_SECRET_CONSTANT')) { 
    exit(); 
} 
1

你可以從答案看:有一個極大的方式來做到這一點,這裏的兩位非常簡單的人,不需要你改變你的目錄結構:

index.php以及包括其他文件header.php

define('INCLUDED', true); 
require 'header.php'; 

header.php

if(!defined('INCLUDED')){ 
    die('Forbidden'); // or you could redirect to home ... whatever you want :) 
} 

或者,您可以通過.htaccess禁止訪問。因此,你甚至不必碰您的代碼:

<Files header.php> 
    order allow,deny 
    deny from all 
</Files> 

如果包括都在一個目錄下,你可以簡單地拒絕訪問該目錄。

1

您可以使用htaccess來確保不會查看特殊文件。通過虛擬主機條目可以實現同樣的效果。

最好的實踐是創建一個/ web文件夾,它是應用程序的「根」,並存儲應該可訪問的所有內容。其他文件夾到其他任何地方,並被包含在腳本中,這些腳本被設計爲被用戶訪問。

你的結構看起來是這樣的:

/var/www/mySite/inc/header.php 
/var/www/mySite/web/index.php (including ../inc/header.php) 
/var/www/mySite/web/css/style.css 

Apache的虛擬主機是這樣的:

<VirtualHost *:80> 
    ServerName www.mysite.com 

    # Basic stuff 
    DocumentRoot "/var/www/mySite/web" 
    DirectoryIndex index.php 
    <Directory "/var/www/mySite/web"> 
     AllowOverride All 
     Allow from All 
    </Directory> 
</VirtualHost> 

現在INC文件夾無法通過您的域名作爲Web文件夾訪問是根源來自URL的所有人。另一方面,您的腳本當然可以低於此值,並且可以在任何地方包含腳本。

相關問題