共享主机部署Laravel应用的.htaccess配置及敏感文件访问问题求助
解决Laravel共享主机敏感文件可访问的问题
嗨,我完全懂你的处境——有时候非代码层面的限制确实没法让我们遵循Laravel的最佳部署方式,不过咱们可以通过调整.htaccess文件来堵住敏感内容被访问的漏洞,具体方案如下:
1. 调整根目录(public_html)的.htaccess
你需要在public_html的根.htaccess里先添加禁止访问敏感文件/目录的规则,再保留重定向到public目录的逻辑。把下面的代码替换你现有的根.htaccess内容:
# 首先阻止访问敏感文件和目录 <FilesMatch "\.(env|gitignore|gitattributes)$"> Order Allow,Deny Deny from all </FilesMatch> <DirectoryMatch "^/(vendor|storage|bootstrap|\.git)"> Order Allow,Deny Deny from all </DirectoryMatch> # 然后将所有请求重定向到public目录 RewriteEngine On RewriteRule ^(.*)$ public/$1 [L]
规则说明:
FilesMatch部分直接禁止任何人访问.env、.gitignore这类核心配置文件,这些文件里存着数据库密码、应用密钥等敏感信息;DirectoryMatch则封锁了vendor(依赖包目录)、storage(存储日志/缓存的目录)、.git(版本控制目录)这些绝对不能暴露给外部的目录;- 最后一条RewriteRule保持你原来的需求,把所有流量转发到public目录处理。
2. 确保public目录的.htaccess保持默认
别修改public目录里Laravel自带的.htaccess,它负责处理Laravel的路由重写,默认内容应该是这样的(如果被改动过,恢复成这个):
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
3. 额外安全加固:调整文件权限
除了.htaccess,你还可以通过FTP或主机控制面板调整文件权限:
- 把
.env文件的权限设为600(只有所有者能读写,其他人完全无权访问); - 把
storage、vendor这类目录的权限设为755(所有者可读写执行,组和其他用户只能读和执行)。
这样一套操作下来,就能彻底阻止外部访问你的敏感文件和目录,同时保持应用正常运行啦。
内容的提问来源于stack exchange,提问作者Terminator Resurrected
相关产品推荐
相关产品推荐

