伪静态规则必须指向public/index.php,apache的.htaccess需放public目录并用index.php?/$1,nginx需配置try_files和fastcgi_param path_info,宝塔须设运行目录为/public,asset()是唯一安全的静态引用方式,cdn回源路径填/public,php路由依赖path_info需显式传递,cdn须禁止缓存php文件,public目录权限不足或软链错误会导致403。

伪静态规则必须指向 public/index.php,不是项目根目录的 index.php
TP5 入口强制在 public/index.php,但多数人复制的伪静态规则仍写成 /index.php 或 /public/index.php 却没配对运行目录。结果就是 CDN 回源时请求 /css/app.css,服务器却因根目录设错返回 404 —— 因为 Nginx/Apache 实际把请求转发到了错误路径。
实操要点:
- Apache 下
.htaccess必须放在public/目录下,内容末尾用index.php?/$1(不是index.php/$1),否则部分 Apache 版本丢参数 - Nginx 的
location /块里必须写try_files $uri $uri/ /public/index.php?$query_string;,不能漏掉/public/ - 宝塔用户务必进「网站 → 设置 → 运行目录」选
/public,否则$_SERVER['DOCUMENT_ROOT']指向错误,runtime/写入失败,后续所有缓存、日志、路由都崩
asset() 是唯一安全的静态资源引用方式
模板里硬写 <link href="/static/css/app.css"> 看似省事,但上线 CDN 后必然断链:本地走相对路径能打开,CDN 节点回源时按你写的路径去服务器找 /static/css/app.css,而真实文件在 public/static/css/app.css,直接 404。
正确做法只有这一种:
- 配置
app.asset_host为完整 CDN 域名,例如https://cdn.example.com(协议必须写全,否则 HTTPS 站混载 HTTP 资源会被浏览器拦截) - 模板中全部改用
{:asset('static/css/app.css')},PHP 代码中用\think\facade\Url::asset('js/main.js') - CDN 控制台「回源路径」显式填
/public(阿里云需带末尾斜杠,腾讯云建议不带,以curl -I https://cdn.example.com/static/css/app.css返回 200 为准)
Nginx 必须补全 fastcgi_param PATH_INFO $fastcgi_path_info;
TP5 默认依赖 $_SERVER['PATH_INFO'] 解析路由,但 Nginx 不默认传递它。缺这行,框架启动就报 URL pathinfo not supported,伪静态和 CDN 都白配。
检查你的 location ~ \.php$ 块内是否包含:
fastcgi_param PATH_INFO $fastcgi_path_info;
常见坑:
- 这行必须写在
include fastcgi_params;之后,否则被覆盖 - 如果用了宝塔「一键配置」,它默认不加这行,得手动补
- phpEnv 用户更要注意:rewrite_module 开了、AllowOverride All 设了,但漏掉这行,照样 500
CDN 缓存规则要严格区分动静
CDN 把 public/index.php 也缓存了?用户看到的就是上次执行的 HTML 快照,不是实时 PHP 输出 —— 刷新页面可能卡在旧状态,甚至返回 503。
必须在 CDN 缓存规则里明确切分:
- 匹配
*.php的路径:缓存时间设为0s或直接「不缓存」 - 匹配
*.css、*.js、*.png、*.woff2的路径:缓存时间可设为31536000(1 年) - 检查响应头:访问一个 CSS 文件,确认返回
Cache-Control: public, max-age=31536000;访问任意路由(如/index),必须是Cache-Control: no-cache, no-store, must-revalidate
最容易被忽略的是 public/ 目录权限和软链问题:上线后突然所有静态资源 403,大概率不是 CDN 配错了,而是 public/ 目录没给 Web 服务读取权限,或误用了软链导致 Nginx 无法穿透。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











