ThinkPHP 5.0 子目录部署需三处关键修改:Web服务器配置(Nginx用alias、Apache确保.htaccess生效)、入口文件index.php中APP_PATH路径修正为../../application或绝对路径、视图配置view_replace_str添加/myapp/public前缀。

Web 服务器配置需适配子目录路径
子目录部署失败,90% 源于 Nginx 或 Apache 未将请求准确转发到 `public/index.php` 并正确传递 PATH_INFO。
- 推荐使用 alias + 精确 location 匹配(比 root + rewrite 更可靠):
location /myapp/ { alias /var/www/html/myapp/public/; }
再单独处理 PHP 请求:location ~ ^/myapp/(.+\.php)$ { alias /var/www/html/myapp/public/$1; ... } - 若用 Apache,确保 `.htaccess` 文件在子目录的 `public/` 下,并开启
AllowOverride All;
若把入口移到根目录(如 `/htdocs/myapp/index.php`),则需把 `.htaccess` 也同步移入该目录。 - 必须验证
try_files $uri $uri/ /myapp/index.php?$query_string;是否生效,否则路由 404。
入口文件 index.php 路径常量需调整
默认 `public/index.php` 假设自身位于网站根目录,子目录下需显式修正 `APP_PATH` 的相对位置。
- 打开 `public/index.php`,将原定义:
define('APP_PATH', __DIR__.'/../application/');
改为(向上两级再进 application):define('APP_PATH', __DIR__.'/../../application/'); - 如果项目结构是 `/myapp/application/` + `/myapp/public/`,该修改确保框架能找到应用目录;
若用绝对路径更稳妥:define('APP_PATH', '/var/www/html/myapp/application/'); - 检查 `require __DIR__.'/../thinkphp/start.php';` 是否能正确定位——路径错误会导致白屏或 Fatal Error。
视图模板中的静态资源路径要重写
原本 `__PUBLIC__/static/css/app.css` 会解析为 `/public/static/...`,但子目录部署后实际 URL 是 `/myapp/public/static/...`,必须补上前缀。
- 在 `application/config.php` 中配置:
'view_replace_str' => [ '__PUBLIC__' => '/myapp/public', '__STATIC__' => '/myapp/public/static', ] - 所有 CSS 中的 background 图片、JS 中的 AJAX 接口前缀、上传返回的 URL 显示,都依赖此配置;
漏掉会导致样式丢失、接口 404、图片不显示。 - 若模板里硬编码了 `/static/`,需全局搜索替换为 `{:__STATIC__}/` 或使用 ``。
额外但关键的检查项
这些不涉及“改配置”,但漏掉就会出问题:
立即学习“PHP免费学习笔记(深入)”;
-
关闭调试模式:确认 `APP_DEBUG = false`,且 `application/config.php` 中 `'debug' => false`;
否则错误页可能泄露 `runtime/log/` 路径或数据库结构。 -
清理 runtime 缓存:删除 `runtime/cache/`、`runtime/log/`、`runtime/temp/` 全部内容;
否则旧路由缓存可能导致子目录下跳转仍指向根路径。 - Linux 大小写敏感:控制器方法 `userCenter()` 对应模板应为 `usercenter.html`(全小写),或显式调用 `$this->fetch('userCenter')`。



















