Php 执行脚本,但不允许用户访问它

Php 执行脚本,但不允许用户访问它,php,Php,可能重复: 对于我正在进行的项目,我需要xxx.php;将我网站的某些部分包含到我的网站中 例如,我有header.php,我的站点只使用一个简单的requireheader.php向世界显示 现在,我如何让页面包含header.php的内容,但让用户无法通过 将文件放在Web服务器的DocumentRoot之外。将文件放在Web服务器的DocumentRoot之外。设置Web服务器,以便: 您有一个公共目录,您的可访问文件驻留在其中,比如static media+index.php等等 有一

可能重复:

对于我正在进行的项目,我需要xxx.php;将我网站的某些部分包含到我的网站中

例如,我有header.php,我的站点只使用一个简单的requireheader.php向世界显示

现在,我如何让页面包含header.php的内容,但让用户无法通过


将文件放在Web服务器的DocumentRoot之外。

将文件放在Web服务器的DocumentRoot之外。

设置Web服务器,以便:

您有一个公共目录,您的可访问文件驻留在其中,比如static media+index.php等等

有一个资源目录,该目录位于公用文件夹之外

将Web服务器设置为从公用目录提供服务

包括如下内容:

/var/www/mySite/inc/header.php
/var/www/mySite/web/index.php (including ../inc/header.php)
/var/www/mySite/web/css/style.css
<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>
需要../private/header.php


设置Web服务器,以便:

您有一个公共目录,您的可访问文件驻留在其中,比如static media+index.php等等

有一个资源目录,该目录位于公用文件夹之外

将Web服务器设置为从公用目录提供服务

包括如下内容:

/var/www/mySite/inc/header.php
/var/www/mySite/web/index.php (including ../inc/header.php)
/var/www/mySite/web/css/style.css
<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>
需要../private/header.php


您可以在索引文件中定义一个常量,然后在header.php中检查该常量是否存在

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

您可以在索引文件中定义一个常量,然后在header.php中检查该常量是否存在

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

从答案中可以看出:有无数种方法可以做到这一点,这里有两种非常简单的方法不需要您更改目录结构:

在index.php和其他包含header.php的文件中:

在header.php中:

或者,您可以通过.htaccess禁止访问。因此,您甚至不必触摸代码:

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

如果您的include都在一个目录中,您可以简单地拒绝访问该目录。

从答案中可以看出:有无数种方法可以做到这一点,这里有两种非常简单的方法不需要您更改目录结构:

在index.php和其他包含header.php的文件中:

在header.php中:

或者,您可以通过.htaccess禁止访问。因此,您甚至不必触摸代码:

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

如果您的include都在一个目录中,您可以简单地拒绝访问该目录。

您可以使用htaccess来确保不查看特殊文件。同样可以通过virtualhost条目实现

最好的做法是创建一个/web文件夹,它是应用程序的根目录,并存储所有应该可以访问的内容。其他文件夹可以放在其他任何地方,并包含在脚本中,脚本经过设计以供用户访问

您的结构可能如下所示:

/var/www/mySite/inc/header.php
/var/www/mySite/web/index.php (including ../inc/header.php)
/var/www/mySite/web/css/style.css
<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>
您的apache虚拟主机如下所示:

/var/www/mySite/inc/header.php
/var/www/mySite/web/index.php (including ../inc/header.php)
/var/www/mySite/web/css/style.css
<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提交的每个人的根目录。另一方面,您的脚本当然可以导航到更低的位置,包括来自任何地方的脚本。

您可以使用htaccess来确保不查看特殊文件。同样可以通过virtualhost条目实现

最好的做法是创建一个/web文件夹,它是应用程序的根目录,并存储所有应该可以访问的内容。其他文件夹可以放在其他任何地方,并包含在脚本中,脚本经过设计以供用户访问

您的结构可能如下所示:

/var/www/mySite/inc/header.php
/var/www/mySite/web/index.php (including ../inc/header.php)
/var/www/mySite/web/css/style.css
<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>
您的apache虚拟主机如下所示:

/var/www/mySite/inc/header.php
/var/www/mySite/web/index.php (including ../inc/header.php)
/var/www/mySite/web/css/style.css
<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提交的每个人的根目录。另一方面,您的脚本当然可以导航到更低的位置,包括来自任何地方的脚本。

我更喜欢重复的问题。将文件移出web可访问路径,或使其所在的目录需要身份验证。您应该指定使用的web服务器。大多数人认为是Apache,但情况可能并非如此。我目前正在处理一个本地主机服务器XAMPP,所以实际上我正在使用Apache。我更喜欢这个重复的问题。将文件移出web可访问路径,或使其所在的目录需要身份验证。您应该指定使用的web服务器。大多数人认为是Apache,但情况可能并非如此。我目前正在使用localhost服务器XAMPP,因此事实上我正在使用Apache。不过,有时候,在使用共享主机时,宿主不会给您DocumentRoot之外的目录。如果是这样的话,你可以使用.htaccess——我在回答中举了一个例子。有时候,当使用共享托管时,你的宿主不会给你DocumentRoot之外的目录。如果是这样的话,您可以使用.htaccess——我在回答中举了一个例子。