Laravel共享主机.htaccess配置:仅允许index.php访问其他文件
Laravel共享主机.htaccess配置:仅允许public/index.php作为唯一入口
嘿,我完全懂你在共享主机上部署Laravel时的需求——就想把public目录下的index.php做成唯一的访问入口,彻底禁止直接访问项目里的其他文件和目录,之前在Stack Overflow找的方案没对上需求对吧?别着急,我给你一套精准适配的配置方案。
第一步:配置项目根目录的.htaccess
在你的Laravel项目根目录(就是包含app、public、vendor这些文件夹的目录)创建或修改.htaccess文件,加入以下内容:
# 禁用目录索引,防止他人直接浏览项目目录结构 Options -Indexes # 开启URL重写引擎 RewriteEngine On # 规则:如果请求的是实际存在的文件或目录,直接允许访问(比如public目录下的静态资源) RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] # 所有其他请求,全部转发到public/index.php(Laravel的前端控制器) RewriteRule ^ public/index.php [L]
第二步:确认public目录的.htaccess配置
Laravel默认在public目录下已经自带了一套.htaccess配置,你可以确保它是完整的,内容如下:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # 处理Authorization头部,确保Laravel能正确识别身份验证信息 RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # 规则:如果请求的不是实际存在的文件或目录,转发到public/index.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [L] </IfModule>
配置说明
- 禁用目录索引:
Options -Indexes会阻止他人直接访问你的项目目录列表,避免暴露敏感文件结构; - 路由转发逻辑:根目录的规则会把所有非实际文件/目录的请求都导向
public/index.php,确保所有请求都经过Laravel的统一处理; - 敏感文件保护:像
.env、composer.json这类根目录下的敏感文件,现在无法被直接访问——尝试访问它们会被转发到Laravel,最终返回404页面,有效保护了敏感信息。
注意事项
- 确保你的共享主机已经开启了
mod_rewrite模块,大部分主流主机默认都已开启,如果没开,联系主机商协助开启即可; - 不要修改Laravel的核心文件,保持项目结构的完整性,后续版本更新也不会受影响;
- 配置完成后记得测试:比如直接访问根目录下的
.env文件,应该返回404;访问你的Laravel路由,应该能正常加载页面。
内容的提问来源于stack exchange,提问作者Reda AT
相关产品推荐
相关产品推荐

