Webman未在config/static.php中提供public_dir配置项,因其静态路径由support/helpers.php中硬编码的public_path()函数决定,该函数在框架启动早期即固化路径,所有静态处理逻辑均依赖其返回值。

Webman 的静态资源访问默认只认 public/ 目录,改目录名、换路径、加前缀都得手动干预,不能靠配置文件一键切换——因为底层是通过 public_path() 辅助函数硬编码决定的。
为什么 config/static.php 里没有 public_dir 配置项
Webman 没提供 public_dir 这类顶层配置,是因为静态路径在框架启动早期就被固化了:所有静态文件中间件、路由预判、甚至 Response::file() 调用,都依赖 public_path() 返回值。这个函数定义在 support/helpers.php,是 PHP 文件级常量拼接,不是从配置数组读取的。
- 修改
config/static.php中的enable或middleware只控制是否启用静态处理逻辑,不改变路径本身 - 试图在
config/bootstrap.php里重定义public_path()会失败——它已被加载器提前声明,PHP 不允许重复定义函数 - 如果你看到某些文档说“改 config 就能换目录”,大概率混淆了 Laravel 或 ThinkPHP 的设计
如何安全地把静态目录从 public 改成 static
必须直接编辑 support/helpers.php,找到 public_path() 函数,把 public 字符串替换成你想要的目录名。注意路径拼接逻辑和斜杠方向:
function public_path($path = '')
{
$path = ltrim($path, '/');
// 原来是:return __DIR__ . '/../public/' . $path;
return __DIR__ . '/../static/' . $path; // 改这里
}
- 改完后,
http://127.0.0.1:8787/css/app.css实际会去找{项目根目录}/static/css/app.css - Web 服务器(Nginx/Apache)的
root配置也必须同步改成指向static/,否则 404 是必然的 - 不要用相对路径如
./static或绝对路径如/var/www/static——__DIR__是可靠的基准点
改目录后 Nginx 配置必须同步调整
很多人只改了 PHP 层,忘了 Web 服务器层,结果出现「本地 php start.php start 能访问,但 Nginx 反代就 404」。关键点在于:root 指令必须和 public_path() 返回值一致:
立即学习“PHP免费学习笔记(深入)”;
- 如果 PHP 层已改成
static/,Nginx 的root就得是/your/project/path/static,不是项目根目录 -
try_files $uri $uri/ /index.php?$uri&$args这行不能动,但它起效的前提是$uri对应的物理文件真在root下存在 - 如果 Nginx 的
root仍指向项目根目录,那/css/app.css就会去查/your/project/path/css/app.css,自然找不到
想让 /app/xx/ 也走主项目 public 目录?别折腾
Webman 明确规定:以 /app/ 开头的请求,默认由插件系统接管,会尝试从对应插件的 public/ 目录找文件。这不是 bug,是设计——它用来隔离多插件静态资源。
- 强行让
/app/xxx.js回退到主项目public/,需要自定义中间件拦截该路径并手动Response::file(public_path('app/xxx.js')) - 但这样会绕过内置静态中间件的缓存头、MIME 类型推导、隐藏文件过滤等机制
- 更合理的做法是:把共用资源放主
public/,插件专属资源放各自public/,路径上做区分,比如统一用/assets/前缀
改静态目录这件事,表面是改一个字符串,实际牵扯 PHP 辅助函数、Web 服务器 root、中间件行为、插件路由规则四层。漏掉任意一层,都会导致资源 404 或被错误处理——尤其容易忽略 Nginx 的 root 同步更新。



















