您的位置:首页 > 运维架构 > Nginx

【thinkphp 5 在nginx 环境下路由无法生效(404 500错误 )的解决方法】

2017-02-10 13:59 113 查看
 
非常惭愧的说,由于之前一直使用的是windowservice,安装apache来进行服务器布置的,这种方式也是最简单最直接的方式,

但是由于php的服务大多都是linux栈的,咱们也不能落后呀,在写了php半年之后,开始拥有的自己的第一台centos的服务器,

 

实话说,centos真的是简洁,部署完成 php ,mysql,nginx,ftp之后只是使用的1g的空间,服务器开启的时候cpu占用率还不到3%【1核1G20g最低配服务器】

 

原本是想先把这个服务器当做api服务器来使用,于是选用的了(传说中适合api 的 thinkphp 框架)

 

一起准备就绪,选择最新的稳定版tp5,下载,配置域名,文件入口,隐藏路径……

 

写完第一个controller 发现,卧槽,

 

404了?

 

仔细阅读文档,没毛病呀

tp5已经默认url_model是兼容模式了呀,为什么还是访问不到呢?

 

万能的百度让我发现很多人都是这种问题,但是 很多都是tp5以前的版本,配置文件写起来不一致,错误了n次

于是自己找文件,仔细阅读:

 

 

参考文献:http://www.9958.pw/post/nginx_config

 

重点

 

我发现:

由于nginx不支持pathinfo导致在thinkphp使用



访问的时候会出现404错误,

这个时候你要看看自己的nginx的config文件

location ~ \.php${
fastcgi_psaa 127.0.0.1:10000;
include fastcgi.conf
}


这是我的config文件

配置也是极其简单,这个时候我们要逐步的改这个配置文件

 

 先贴最终的 文件【注意:不要直接复制粘贴】

location ~ \.php/?.* {
fastcgi_pass   127.0.0.1:10000;
fastcgi_index index.php;
set $path_info ὀ~\ὀ~];
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ ὀ~\^(.+?\.php)(/.+)$ὀ~]) {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME /www_amiku_cn$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
include fastcgi.conf;
}
  


  

 首先



location ~ \.php${


  改为

location ~ \.php/?.* {


这样,用url在访问您的网站的时候就能够识别所有的网址

接下来

fastcgi_psaa 127.0.0.1:10000;


 这一句要大家根据自己的端口号来填写,不需要改,切记不要随意复制粘贴

接着在你原有的配置中删除其他项

替换成pathinfo及地址匹配方法

set $path_info ὀ~\ὀ~];
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ ὀ~\^(.+?\.php)(/.+)$ὀ~]) {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME /www_amiku_cn$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;


 最后,

把原本的include的方法补上【注意】

【注意】在include的的时候注意要确认自己的文件名称

我这里的是

fastcgi.conf


有些人的是

fcgi.conf


是不一样的,注意不要填错

接着:wq保存修改

 

reload 一次即可

 

这样thinkphp在nginx环境下就能正常访问及debug了

 

最后附上nginx去掉index.php的方法

同理,加载nginx.conf的location后面即可

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


 

 

最后:感谢大神的参考资料:http://www.9958.pw/post/nginx_config

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐