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

共享主机部署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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:30:28