Apache 2.4 下 ThinkPHP 8.0 伪静态核心规则是:在 public/.htaccess 中配置 RewriteEngine On 及两个 RewriteCond(!-d 和 !-f),再通过 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 将非真实文件/目录请求交由 index.php 处理并正确传递 PATH_INFO;前提需启用 mod_rewrite、AllowOverride FileInfo Options,且框架中 'url_route_on' => true。

Apache 2.4 下 ThinkPHP 8.0 的伪静态规则,核心是让所有非真实文件/目录的请求,都交由 public/index.php 统一处理,并正确传递路径信息(PATH_INFO)。规则必须放在 public 目录下 的 .htaccess 文件中,且 Apache 需启用 mod_rewrite 并允许覆盖配置。
关键前提条件
确保以下三点已满足,否则规则无效:
- Apache 已启用
mod_rewrite模块(Linux 常用a2enmod rewrite) - 对应虚拟主机或目录的
AllowOverride设置为FileInfo Options(不能是None) -
.htaccess文件位于项目 public/ 目录内(与index.php同级),不是项目根目录
标准 .htaccess 规则内容
在 public/.htaccess 中写入以下内容:
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
<pre class="brush:php;toolbar:false;"># 禁止访问敏感文件
RewriteRule ^\.env$ - [F,L]
RewriteRule ^\.git/ - [F,L]
# 仅对非真实文件和非真实目录的请求进行重写
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# 将请求转发给 index.php,并保留原始路径作为 PATH_INFO
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
立即学习“PHP免费学习笔记(深入)”;
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
说明:
QSA:保留原始查询参数(如 ?page=2&sort=id)
PT:PassThrough,必须存在,否则 Apache 不会把路径段正确注入 $_SERVER['PATH_INFO'],TP8 路由将无法识别
L:终止后续规则匹配
二级目录部署时需加 RewriteBase
若网站访问地址为 https://example.com/myapp/(即 TP8 部署在子目录),必须在 <ifmodule></ifmodule> 内首行添加:
RewriteBase /myapp/
注意:
- RewriteBase 的值必须与实际 URL 中的子目录路径完全一致(含开头斜杠,不含结尾斜杠)
- 它告诉 Apache 所有相对路径重写都基于该前缀,否则 index.php/$1 会定位错误
框架侧必须同步开启路由
仅配好 .htaccess 不够,还需确认 TP8 内部支持伪静态环境:
- 检查
config/app.php中:'url_route_on' => true(必须为 true) -
'pathinfo_depr' => '/'(默认值,保持即可) - 不建议设
'url_common' => true,TP8 默认走 PATH_INFO 模式 - 删除或重命名
.env文件中的APP_DEBUG=true(调试模式可能干扰 PATH_INFO 解析)
验证是否生效
完成配置后按顺序验证:
- 访问
http://yoursite.com/index.php/index/hello→ 应正常显示(确认框架和 PHP 正常) - 访问
http://yoursite.com/index/hello(不带index.php)→ 应同样显示,且地址栏不跳转、不出现 404 - 查看 Apache 错误日志(如
/var/log/apache2/error.log),搜索PATH_INFO或rewrite关键词,确认无拒绝或未匹配记录


















