好久没写PHP,最近因为项目指定ThinkPHP于是又重温PHP狂潮,由于长期写JavaScript以至于我忘了PHP的数组竟然还可以自定义key...闹笑话了。
ThinkPHP默认不是使用PATHINFO模式,对于目前主流的流行框架,貌似PATHINFO已经成为流行,更让我意外的是ThinkPHP还能支持路由,有点类似于Python网络框架的路由了。之前在网上看不少人在nginx开启PATHINFO模式主要修改localhost \.php 里的内容,但最近发现了一条更简便的方法:
代码如下 | 复制代码 |
location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; break; } } |
或者更高级点的
在nf文件增加如下配置
代码如下 | 复制代码 |
if (!-e $request_filename) { rewrite ^/(.*)index.php(.*)$ $1/index.php?s=$2 last; break; } |
利用了nginx的url重写机制实现了这一功能,而ThinkPHP的config.php也不需要添加:URL_MODEL => 1这个配置了。
补充:
网上搜了很多方法都不奏效,研究了一天,发现通过以下的配置可以完美支持 'URL_MODEL' => 2 的情况了
代码如下 | 复制代码 |
location /project/ { index index.php; if (!-e $request_filename) { rewrite ^/project/(.*)$ /project/index.php/$1 last; break; } } location ~ .+\.php($|/) { set $script $uri; set $path_info "/"; if ($uri ~ "^(.+\.php)(/.+)") { set $script $1; set $path_info $2; }
fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php?IF_REWRITE=1; include /APMServ/nginx/conf/fastcgi_params; fastcgi_param PATH_INFO $path_info; fastcgi_param SCRIPT_FILENAME $document_root/$script; fastcgi_param SCRIPT_NAME $script; } |
这里先把project下的请求都转发到index.php来处理,亦即ThinkPHP的单一入口文件;然后把对php文件的请求交给fastcgi来处理,并且添加对PATH_INFO的支持。
重启Nginx以后,http://localhost/project/Index/insert, http://localhost/project/index.php/Index/delete 这样的URL都可以正确访问了。