如何在CyberPanel VPS上保护Laravel 8项目的.env/.yml/.json等文件
解决CyberPanel上Laravel .htaccess文件访问限制失效问题
问题分析
你的.htaccess规则在本地正常但在CyberPanel上失效,主要是两个核心原因:
- Apache版本兼容问题:你使用的
order allow,deny是Apache 2.2的语法,而CyberPanel默认搭载Apache 2.4,需改用新版权限控制语法 - CyberPanel虚拟主机未完全开启
.htaccess支持:默认配置可能限制了AllowOverride权限,导致自定义规则无法生效
修改后的.htaccess配置
替换当前代码,改用Apache 2.4兼容规则,同时优化敏感文件匹配逻辑:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # 处理授权头 RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # 禁止直接访问敏感文件 RewriteRule ^\.env - [F,L] RewriteRule \.(json|lock|xml|yml|yaml)$ - [F,L] # 移除URL末尾斜杠(非文件夹) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # 所有请求转发到前端控制器 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
规则说明
- 用
RewriteRule替代<Files>块,彻底规避Apache版本兼容问题 [F]标记直接返回403 Forbidden,[L]表示终止后续规则执行- 合并所有敏感文件后缀匹配,规则更简洁高效
CyberPanel配置检查
- 登录CyberPanel,进入网站 -> 列表网站,找到对应Laravel项目的网站,点击管理
- 进入Apache配置 -> 编辑.htaccess,确认文件放在Laravel的
public目录下(Laravel的Web根目录必须指向public) - 回到Apache配置,点击编辑虚拟主机配置,找到
<Directory>块,确保配置如下:<Directory /home/你的域名/public> AllowOverride All Require all granted </Directory> - 保存配置后重启Apache服务:
systemctl restart httpd
验证测试
访问域名下的敏感文件(例如你的域名/.env或你的域名/composer.json),应返回403 Forbidden状态码。
内容的提问来源于stack exchange,提问作者chigs
相关产品推荐
相关产品推荐

