ThinkPHP在Nginx下推荐用try_files实现伪静态,核心是将非真实静态资源请求统一交由index.php处理;基础规则为location / { try_files $uri $uri/ /index.php?$query_string; },需确保root指向public目录。

ThinkPHP 在 Nginx 下推荐使用 try_files 实现伪静态,核心是把所有非真实存在的静态资源请求,全部交由 index.php 入口统一处理。
基础规则(适用于 ThinkPHP 6/7,默认路由模式)
这是最常用、最稳妥的写法,放在 server 块内,且需确保 root 已正确指向 public 目录:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
说明:
-
$uri:先匹配真实存在的文件(如 .js、.css、图片) -
$uri/:再匹配真实存在的目录(如访问 /admin/) -
/index.php?$query_string:其余所有请求(如 /user/list、/api/info)都重写到 index.php,并透传原始查询参数
兼容子目录部署(如网站在 /tp6/ 下)
若项目部署在二级目录(例如域名后带 /tp6/),需用 alias 或调整 location 路径,并修正 try_files 中的入口路径:
location /tp6/ {
alias /var/www/tp6/public/;
try_files $uri $uri/ /tp6/index.php?$query_string;
}
注意:alias 结尾不加斜杠,try_files 中的 /tp6/index.php 必须与 location 路径前缀一致;如果用 root,则改用 root /var/www/tp6; + location /tp6/ { try_files $uri $uri/ /tp6/public/index.php?$query_string; }。
排除静态资源,提升性能(可选优化)
显式声明常见静态后缀,避免无谓进入 PHP,更高效:
location ~ \.(js|css|png|jpg|gif|svg|ico|woff2?|ttf|eot)$ {
try_files $uri =404;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
这样,带这些后缀的请求直接由 Nginx 返回或 404,不经过 PHP,也避免因静态文件名含问号等引发误判。
ThinkPHP 5.x 注意事项
TP5 默认入口是 public/index.php,但部分旧版配置可能用 index.php 在根目录。务必确认实际入口路径;另外 TP5 的 URL 模式若开启 pathinfo(非兼容模式),上述规则仍适用——因为 $query_string 会自动携带 PATH_INFO 参数(如 /index.php/user/index → PATH_INFO=/user/index),框架可正常解析。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











