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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:54:39