必须同时配置nginx和thinkphp 5.1框架:nginx需用if+rewrite规则将非静态请求转至/index.php?s=$1,并确保root指向public目录;框架中url_route_on=true、url_html_suffix=''、pathinfo_depr='/'三者缺一不可,否则404或白屏。

ThinkPHP 5.1 在 Nginx 下要实现伪静态(即访问 /index/hello 而非 /index.php/index/hello),必须同时满足服务器层和框架层的配置要求。只改 Nginx 规则或只开路由,都会导致 404 或白屏。
Nginx 配置:用 if+rewrite 最稳妥
小皮(phpStudy)、宝塔等面板的「伪静态」下拉菜单常默认填入 Laravel 风格规则,不兼容 TP5.1 的 index.php?s=... 模式。必须手动编辑站点配置文件(如 vhosts.conf 或 your-site.conf),在 server 块内找到 location / { },替换成:
location / {if (!-e $request_filename) {rewrite ^(.*)$ /index.php?s=$1 last;}}
注意:
– 该块必须放在 location ~ \.php$ 之前;
– root 指令需明确指向项目 public/ 目录,例如:root "D:/www/myapp/public";;
– 不要用 break,否则子路径参数会丢失。
ThinkPHP 5.1 框架配置:三项必须对齐
打开 config/app.php,确认以下设置:
-
url_route_on → 必须为
true,否则路由系统完全不启动; -
url_html_suffix → 设为
''(空字符串),才能支持无后缀 URL(如/user/list);设成'html'就只能访问/user/list.html; -
pathinfo_depr → 必须为
'/',与 Nginx 规则中s=$1的分隔逻辑一致;若改成'-'或'.',PATH_INFO 解析失败,路由匹配为空。
验证顺序与常见问题定位
别一保存就刷页面,按步验证:
- 先访问
http://localhost/index.php/index/hello—— 能显示内容,说明 PHP 和框架本身正常; - 再访问
http://localhost/index/hello—— 若 404,重点检查:Nginx 是否重载成功、root是否指向public、if块括号是否完整; - 若返回空白页(HTTP 200 但无输出),打开 Nginx 错误日志(如
c:\phpstudy_pro\extensions\nginx1.22.1\logs\error.log),搜索Primary script unknown—— 多数是SCRIPT_FILENAME路径拼错,根源常在root设置错误或未指向public目录。
子目录部署需额外修正
如果项目放在二级目录(如 https://example.com/myapp/),原始规则会截断路径。需在 server 块中单独加一个带前缀的 location:
location /myapp/ {if (!-e $request_filename) {rewrite ^/myapp/(.*)$ /myapp/index.php?s=$1 last;}}
同时确保 root 是站点根路径(如 /www/wwwroot/example.com),而非 /www/wwwroot/example.com/myapp,否则 index.php 找不到。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











