使用TP5开发了一个基本的API的提供网站,用做一个DEMO的测试,这是上传至服务器的一些小坑的记录。
首先是权限问题,对于Runtime文件夹无法读写,TP保存无权限,好解决,因为是测试环境直接:
chmod -R 777
,解决。第二个问题是因为API的方便性和安全性,写代码的时候开启了强制模式,在Route中定义的路由:
'url_route_on' => true,
'url_route_must' => true,
导致线上的Nginx只能进入主页,所有的JQuery请求和超链都已经失效。但是对于domain/index.php/module/controller/action
这样的访问方式是可行的。本地开发环境是Apache,并没有这个问题,所以在本地切换成了Nginx,修改合适的rewrite和php-PathInfo,具体配置代码如下:
server {
listen 81;
server_name wxapi.com;
set $root 'E:/PHP/WX_demoAPI/public';
root $root;
index index.php index.html index.htm;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
location /{
if ( !-e $request_filename) {
rewrite ^(.*)$ /index.php/$1 last;
break;
}
}
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root $root;
}
}
这样配置,本地就没有问题了。
- 但是上线改配置的时候,问题又出现了,线上使用的是lnmp一键安装包,PHP进程sock进行访问时权限问题,也不敢在给用户提权,于是直接修改nginx的pathinfo支持就可以了。通过更改
conf/enable-php.conf
进行对于PHP-PathInfo的支持。
原来的配置如下图:
对于一键安装包已经提供了pathinfo的配置,更改后的代码(错误方式,备注已改正):
这里出现了一个错误,是在之后发现的,其实不应当更改enable-php而是在vhost引入enable-php-pathinfo即可以完成。即,修改对应虚拟主机的配置文件将include enable-php.conf;替换为include enable-php-pathinfo.conf;
lnmp restart
完美解决。