ThinkPHP6.0伪静态配置核心是用try_files将非静态请求转发至/index.php?$query_string,并在location ~ \.php$中设置fastcgi_param PATH_INFO $fastcgi_path_info以正确解析路由。

ThinkPHP 6.0 在 CentOS 7 + Nginx 1.20 环境下,伪静态配置核心是让所有非真实文件/目录的请求,统一交由 index.php 入口处理,并正确传递路由参数(即 PATH_INFO 或 QUERY_STRING)。Nginx 默认不支持 Apache 风格的 .htaccess,必须在 server 块中显式配置。
关键配置项:location / 和 PHP 处理段
在你的站点 server 配置块(如 /etc/nginx/conf.d/your-site.conf)中,需包含以下两部分:
-
根路径匹配:用
try_files判断请求资源是否存在,不存在则 fallback 到/index.php并附带完整查询字符串 -
PHP 路由支持:在
location ~ \.php$中明确设置fastcgi_param PATH_INFO或使用$fastcgi_path_info,确保 ThinkPHP 的 URL 解析(如/index/user/list)能被正确识别
推荐写法(兼容 PATH_INFO 模式)
这是最稳妥、官方文档和生产环境广泛验证的方式:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
<p>location ~ .php$ {
fastcgi_pass unix:/var/run/php-fpm/www.sock; # 根据你的 PHP-FPM 实际 sock 路径调整
fastcgi_index index.php;
include fastcgi.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}</p>
说明:
– 第一行 try_files $uri $uri/ /index.php?$query_string 支持标准 QueryString 路由(如 ?s=index/user/list),也兼容大多数 ThinkPHP 6 默认行为;
– fastcgi_param PATH_INFO $fastcgi_path_info 是启用 PATH_INFO 的关键,它依赖 Nginx 正确解析 .php 后的路径段,因此要求 location ~ \.php$ 的正则足够精确(不能写成 ~ \.php 少了结尾 $);
– 若你项目强制使用 PATH_INFO(如访问 /index.php/user/list),还需确认 PHP 配置中 cgi.fix_pathinfo=1(默认值,不建议改)。
备选写法(仅限简单部署,不推荐长期用)
如果服务器无法启用 $fastcgi_path_info(例如某些旧版 Nginx 编译缺失 PCRE 支持),可临时用 rewrite 回退方式(兼容性略高,但多一次内部重定向):
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
}
}
⚠️ 注意:
– if 在 location 中有性能和语义限制,Nginx 官方不推荐用于复杂逻辑;
– 此写法将路径全部塞进 s= 参数,依赖 ThinkPHP 自动解析,对含问号或特殊字符的 URL 可能出错;
– 必须配合 fastcgi_param PATH_INFO "" 或留空,避免冲突。
验证是否生效
配置完成后务必执行:
-
sudo nginx -t检查语法 -
sudo systemctl reload nginx重载配置(不用 restart) - 访问一个非首页路由,例如
http://your-domain.com/index/test,看是否正常响应而非 404 - 查看 PHP 错误日志(
/var/log/php-fpm/www-error.log)和 Nginx access/error 日志,确认无Primary script unknown或no input file specified类报错
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











