AppNode伪静态必须用try_files指令,禁用if+rewrite;需写为try_files $uri $uri/ /index.php?s=$uri&$args,并确保根目录指向public、路由开启且权限正确。

AppNode 不支持 .htaccess,所有伪静态规则必须写在面板的「站点配置 → 伪静态」文本框里,用 Nginx 语法。直接粘贴 Apache 的 RewriteRule 会 500 或 404。
AppNode 伪静态配置必须用 try_files
AppNode 后台的「伪静态」输入框本质是往 location / 块里注入 Nginx 指令,if + rewrite 在该环境下容易失效或被忽略。唯一稳定的方式是:
try_files $uri $uri/ /index.php?s=$uri&$args;- 不能写成
rewrite ^/(.*)$ /index.php/$1 last;—— AppNode 对这种写法兼容性差 - 确保
/index.php路径正确:如果项目入口在public/目录下,且 AppNode 已将网站根目录设为public,就用/index.php;否则要补全路径,比如/public/index.php
ThinkPHP 版本决定 s 参数格式
TP5 和 TP6 解析 s 参数的方式不同,直接影响 URL 是否能路由成功:
根据 package.json 中的 engines 字段自动检测 Node.js 版本需求,未安装 nvm 时自动安装并切换至对应版本。支持 Windows、macOS、Linux。适用于 Node.js 项目开发、版本切换和环境配置。
- TP5.x(含 5.0、5.1)默认用
s=接收完整 PATHINFO,规则中必须写/index.php?s=$uri&$args - TP6.x 默认改用
PATH_INFO环境变量,但为兼容旧习惯,仍支持s=;若你发现路由不匹配,检查config/app.php中是否设置了'pathinfo_fetch' => ['s', 'PATH_INFO'] - 别漏掉
&$args—— 否则带查询参数(如?page=2)的 URL 会丢失
常见 404 的三个硬性检查点
配置完保存并重启 Nginx 后仍 404,优先排查以下三项:
- AppNode 站点根目录是否指向 ThinkPHP 的
public目录(不是项目根目录) -
config/app.php中'url_route_on' => true是否开启,且没被环境配置覆盖 - 服务器上 PHP 是否启用了
mod_rewrite?AppNode 是 Nginx 环境,这个模块无关 —— 但很多人误查,其实只需确认 Nginx 本身已加载ngx_http_rewrite_module(默认都加载)
最易被忽略的是 public 目录权限和 Nginx 用户读取权限 —— AppNode 默认用 www 用户跑进程,public 及其子文件需对 www 用户可读,否则连 index.php 都加载失败,直接返回 403 或空白页。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










