ThinkPHP6二级目录伪静态需Nginx精准匹配路径、透传PATH_INFO并配置base_url;关键包括location /myapp/块、alias指向、try_files转发、fastcgi_split_path_info提取参数,及框架中base_url='/myapp/'和url_common=true设置。

DeepSeek 是一个大语言模型,不能直接生成或执行 Nginx 配置;但它可以帮你写出符合 ThinkPHP 6.0 路由机制的二级目录部署所需的伪静态规则。关键在于:ThinkPHP 6.0 默认使用 PATH_INFO 模式(非强制重写),但部署在二级目录(如 https://example.com/myapp/)时,Nginx 必须正确截断路径前缀,并将剩余部分交由 index.php 处理。
明确你的部署结构
假设你的 ThinkPHP 6.0 项目放在网站根目录下的 /var/www/html/myapp/,对外访问地址是 https://example.com/myapp/。那么所有请求都应被映射到 /myapp/index.php,且 PHP 要能正确识别 PATH_INFO(即路由参数,如 /myapp/user/list 中的 /user/list)。
Nginx 二级目录伪静态规则(推荐)
在对应 server 块中,为 /myapp/ 路径添加 location 块。以下规则兼容 ThinkPHP 6.0 的默认路由模式(url_common 开启,不依赖 .htaccess):
注意:把 myapp 替换为你实际的二级目录名(如 admin、api 等)
立即学习“PHP免费学习笔记(深入)”;
- 使用
alias指向物理路径(比root更适合二级目录) - 用
try_files判断静态文件是否存在,不存在则转发给 index.php - 通过
fastcgi_split_path_info提取 PATH_INFO,确保路由参数不丢失
配置示例:
location /myapp/ {
alias /var/www/html/myapp/;
try_files $uri $uri/ /myapp/index.php?$query_string;
<pre class="brush:php;toolbar:false;">location ~ \.php$ {
if (!-f $request_filename) { return 404; }
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000; # 或 unix:/var/run/php/php8.1-fpm.sock
fastcgi_index index.php;
}}
ThinkPHP 6.0 端需同步配置
仅靠 Nginx 不够,TP6 还要知道它运行在二级目录下,否则生成的 URL(如 url() 辅助函数)会漏掉前缀:
- 修改
config/app.php中的'base_url' => '/myapp/'(带开头和结尾斜杠) - 确保
'url_common' => true(启用 PATH_INFO 模式) - 如果使用子域名或反向代理,检查
$_SERVER['SCRIPT_NAME']是否被正确覆盖,必要时在public/index.php顶部手动设置:$_SERVER['SCRIPT_NAME'] = '/myapp/index.php';
验证是否生效
部署后测试几个关键点:
- 访问
https://example.com/myapp/→ 应显示首页,不报 404 或 500 - 访问
https://example.com/myapp/index/index→ 应触发IndexController@index方法 - 查看 PHP 日志或
phpinfo()中的PATH_INFO值,确认其为/index/index而非空或错误路径 - 在控制器中打印
input('path')或request()->path(),验证路由解析是否正常



















