朋友的一个ThinkPHP项目需要部署,用Linux服务器,搭宝塔面板。第一台服务器装好宝塔,配上Nginx和PHP 5.6,建站、绑定域名,一气呵成,一切正常。

但昨天在另一台服务器上重复同样的操作——宝塔、Nginx、PHP 5.6、建站、绑定域名——访问时却直接给了个404。一顿搜索后发现,问题出在宝塔网站设置里那个“防跨站攻击”的开关。第一台服务器默认没勾,这台却勾上了,去掉勾选后立即恢复正常。
接着把项目放到本地Windows 10上,装好PHPStudy,先用默认的PHP 5.6 + Apache,在站点域名管理里新建一个,端口设为8001。浏览器访问 https://localhost:8001,正常显示。
然后换成Nginx + PHP 5.6,同样新建站点、端口8001,结果无论访问哪个页面都报错:No input file specified。
网上搜了一整天,终于找到一篇能解决问题的文章。查看 C:\phpStudy\PHPTutorial\nginx\logs\error.log,发现错误信息指向路径转义问题。项目目录是 c:\temp\daochi\php,原来Nginx把 \t 给转义了。进入 C:\phpStudy\PHPTutorial\nginx\conf\vhosts.conf,把路径改成 c:\emp 就好了。
重新访问 https://localhost:8001,能显示了,但又冒出另一个问题:ThinkPHP项目在本地测试需要手动加上 index.php。如果想去掉这个尾巴,还得继续改 vhost.conf,加上ThinkPHP的路由重写规则。差点忘了,宝塔面板上也要在网站配置文件里加上同样的内容:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
至此,本地和服务器上的部署都跑通了。核心就是两件事:宝塔里检查防跨站开关,Nginx反赌意路径转义和ThinkPHP的URL重写配置。如果你也遇到类似问题,不妨顺着这个思路排查一遍。
