如何通过.htaccess配置禁止URL直接访问includes文件夹内的PHP文件
限制includes文件夹HTTP访问的可用方案
以下方案均可以实现拦截URL直接访问的需求,同时不影响项目内部PHP文件的include/require调用:
方案1:服务器配置限制(优先推荐,性能最优)
无需修改项目代码,仅需调整服务器配置即可生效:
- Apache环境:在
includes文件夹下新建.htaccess文件,写入如下规则:Order Deny,Allow Deny from all - Nginx环境:在站点的Nginx配置文件中添加如下拦截规则,修改后执行
nginx -s reload重载配置生效:location ~* /includes/.*\.php$ { deny all; return 403; }
方案2:PHP代码层面校验(兼容性最强,无需服务器配置权限)
适合没有服务器修改权限、或者需要跨环境兼容的场景:
- 在所有
includes目录下的PHP文件头部加入如下代码:<?php if (!defined('ACCESS_ALLOWED')) { exit('Access Denied'); } - 在项目的入口文件(比如前端入口
index.php、后台入口admin.php等)的最顶部提前定义常量:<?php define('ACCESS_ALLOWED', true);
直接通过URL访问include文件时,常量未定义会直接终止运行,内部调用时提前定义了常量即可正常执行。
方案3:移出Web根目录(安全性最高)
如果支持调整项目结构,直接将includes文件夹移动到站点的Web根目录之外。比如你的站点Web可访问根目录为/var/www/html/public,就将includes文件夹放到/var/www/html/includes路径下,该路径不会被HTTP请求访问到,完全杜绝直接访问风险,内部调用时传入对应相对路径或绝对路径即可。
内容的提问来源于stack exchange,提问作者MaxPayne420
相关产品推荐
相关产品推荐

