You need to enable JavaScript to run this app. 无虚拟主机权限时如何通过htaccess配置Bonfire Codeigniter站点根目录
优惠活动
大模型
产品
解决方案
定价
更多

无虚拟主机权限时如何通过htaccess配置Bonfire Codeigniter站点根目录

无虚拟主机权限时通过.htaccess实现Bonfire站点正确指向的配置方案

生效逻辑说明

当前服务器Web根目录直接指向Bonfire项目外层根目录(包含app、public、vendor、writable等核心文件夹),无法修改Apache配置将根目录指到public子目录时,核心思路是在项目根目录的.htaccess中拦截所有进站请求,透明转发到public目录的站点运行层,同时阻断对敏感资源的直接访问,避免安全风险。
之前单独添加RewriteBase public/规则不生效的原因是:该指令仅对当前所在目录(通常是public目录)内的重写规则的路径解析生效,未经过路径转发的请求根本不会触达public目录下的.htaccess文件,自然无法适配站点运行。

分目录配置规则

1. 项目根目录(即当前服务器Web根指向的外层目录)下新增.htaccess文件

将以下规则写入项目根目录的.htaccess,实现请求转发与安全拦截:

RewriteEngine On

# 拦截所有对非公开敏感目录的直接访问,返回403禁止状态
RewriteRule ^(app|vendor|writable|tests)/ - [F,L]

# 拦截所有对根目录下敏感文件的直接访问
RewriteRule ^(\.env|composer\.(json|lock)|.htaccess|phpunit\.xml|spark)$ - [F,L]

# 匹配public目录下存在的真实文件/目录,直接指向对应public路径
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -d
RewriteRule ^(.*)$ /public/$1 [L]

# 其余所有请求统一转发到public目录下的前端控制器
RewriteRule ^(.*)$ public/index.php?/$1 [L,QSA]

2. public目录下的原有.htaccess规则调整

public目录下Bonfire自带的.htaccess无需额外添加RewriteBase public/,保留原有核心重写规则即可,仅需确认规则未开启强制跳出到public路径的逻辑,典型的有效配置如下:

RewriteEngine On

# 将请求解析到index.php前端控制器
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

配置注意事项

  • 需确认服务器Apache已开启mod_rewrite模块,否则所有重写规则无法生效
  • 规则中F标记代表返回403禁止访问,不要随意删除敏感资源拦截规则,否则会造成源码、数据库凭证等信息泄露
  • 配置完成后不要在URL中手动暴露/public路径,否则会被判定为真实目录访问,无法经过前端控制器的权限校验

配置验证要点

  • 直接访问站点根域名,可正常加载站点首页,URL无额外路径跳转
  • 尝试直接访问站点下的.env、composer.json等敏感文件,可正常返回403状态
  • 站点的静态资源、后台路由、API接口均可正常访问,无404或路径解析错误

内容的提问来源于stack exchange,提问作者Esteban Solorzano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 21:36:03