上一篇 下一篇 分享链接 返回 返回顶部

ThinkPHP路由失效Nginx伪静态适配方案

发布人: 发布时间:8小时前 阅读量:3

问题现象

ThinkPHP框架在Nginx服务器上部署时,常出现路由失效、访问任何非首页URL返回404错误。根本原因是Nginx默认不支持PATH_INFO模式,且重写规则配置不准确。

解决方案

1. 确认PHP运行模式

确保PHP以php-fpm方式运行,并支持PATH_INFO。在php.ini中设置cgi.fix_pathinfo=1

2. 配置Nginx伪静态规则

在Nginx的server配置块中添加如下规则:

location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } }

该规则将不存在的文件请求重写到index.php,并传递原始URL的路径参数。

3. 处理PATH_INFO支持

若上述规则仍失效,需进一步配置PATH_INFO传递:

location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_param PATH_INFO $fastcgi_path_info; }

同时,在server块中加入:

set $fastcgi_path_info ''; if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") { set $fastcgi_path_info $2; }

4. 验证与测试

重启Nginx和PHP-FPM,访问任意路由如/index/user/login,应能正常显示。若仍有问题,检查URL_MODEL配置:'URL_MODEL'=>1(PATHINFO模式)。

注意事项

  • 确保Nginx配置中try_files指令未被错误覆盖。
  • 不同ThinkPHP版本可能有细微差异,建议参考官方文档。
  • 若使用HTTPS,需在重写规则中保持协议一致。
目录结构
全文
企业微信 企业微信
微信公众号 微信公众号
服务热线: 400-790-1688
电子邮箱: 3310008520@qq.com