You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Apache/PHP配置禁止PHP读取网站上级目录?

实现网站目录隔离:禁止PHP读取上级目录的两种方案

你可以通过Apache VirtualHost配置或PHP配置实现目录隔离,推荐用Apache配置,因为能针对单个站点生效,不影响其他网站。

一、通过Apache VirtualHost配置实现(推荐)

在你的VirtualHost的<Directory>块中添加php_admin_value指令,设置open_basedir限制PHP的文件访问范围:

修改后的完整配置如下:

<VirtualHost *:80>
    ServerName mysite.pl
    ServerAlias www.mysite
    DocumentRoot /var/www/public_html/mysite

    <Directory /var/www/public_html/mysite>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        # 限制PHP仅能访问当前站点目录和系统临时目录(按需调整)
        php_admin_value open_basedir "/var/www/public_html/mysite:/tmp"
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <IfModule mod_dir.c>
        DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm index.php5
    </IfModule>

</VirtualHost>

说明:

  • open_basedir指定PHP允许访问的目录列表,多个目录用冒号(Linux)分隔;
  • /tmp是可选的,用于PHP处理临时文件(如上传、会话文件),如果不需要可以去掉;
  • 配置生效后,PHP尝试访问../../public_html/another_site/这类上级目录时会直接报错,无法读取。

二、通过PHP配置实现

如果不想修改Apache配置,也可以通过以下方式设置:

  1. 站点根目录的.htaccess文件(需开启AllowOverride All):
    在/var/www/public_html/mysite/.htaccess中添加:
php_value open_basedir "/var/www/public_html/mysite:/tmp"
  1. PHP-FPM池配置(若使用PHP-FPM):
    找到对应站点的FPM池配置文件(如/etc/php/8.2/fpm/pool.d/mysite.conf),添加:
php_admin_value[open_basedir] = "/var/www/public_html/mysite:/tmp"
  1. 全局php.ini配置(不推荐,会影响所有站点):
    修改php.ini中的open_basedir参数:
open_basedir = "/var/www/public_html/mysite:/tmp"

注意:

  • Apache配置中的php_admin_value优先级最高,会覆盖PHP层面的设置;
  • 多站点环境下,全局php.ini设置会限制所有站点,灵活性差,不推荐。

内容的提问来源于stack exchange,提问作者Blazej Kita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 19:30:54