Windows下yaf+Nginx配置

最近有个新项目要用yaf框架,在Windows上将yaf框架代码部署好之后。想增加一个模块调试一下,但是添加完module之后,访问路由死活不会到新的module下,一直访问的是默认的index模块。网上查了半天,最终在官方的文档下找到了思路。是Nginx不支持PATH_INFO的问题,就是说,默认的Nginx配置,在PHP的环境变量$_SERVER下的$_SERVER[‘PATH_INFO’]是个空字符串,导致yaf路由不到新的模块下。

PHP: 范例 – Manual

如图所示:

重点是将$_GET的path_info参数赋值给$_SERVER,因为yaf中是根据这个来判断路由到哪个模块的。当然前提是得通过重写给get的path_info赋值

rewrite ^/(.*)$ /index.php?_path_info=/$1 last;

我试了下,这样确实好使。而且,如果你直接在代码中给$_SERVER[‘PATH_INFO’]赋值null,也是好使的。(这个可能得看下yaf底层是怎么去匹配这个路由了)

但是这样直接在代码中写死这个实在是太不“优雅”了。

又是一番百度之后,终于在yaf的官方文档中,看到了Nginx的重写规则。按照官方文档配置好之后,就可以正常访问新添加的模块了。

3.2. Hello World (laruence.com)

最后,得出结论就是:出现问题先去找官方文档查看,不要直接去百度想着找现成的答案,这样太容易走弯路。

这次的问题就是先在官方的文档下,找到是path_info的问题这个关键点,然后又去查找Nginx匹配规则问题。最终也是在官方的文档中找到解决方法。

尤其是开源的项目,网上其他人遇到的问题,并不一定是完全适用你的,要搞清楚自己的问题是什么,出现错误的原因是什么,然后再对症下药。

网上好多的关于Nginx的配置,都是针对thinkPHP的路由的修改,并不适用于Windows下yaf+Nginx的模式。

最后贴一下,我的最终的Nginx配置,也顺便记录下Nginx配置相关的信息

server {
listen 208;
server_name localhost;
root "D:/yaf/yaf_test_hupc";
access_log logs/yaf/access_log.log;
error_log logs/yaf/error_log.log;
if (!-e $request_filename) {
rewrite ^/(.*) /index.php/$1 last;
}
location / {
index index.php index.html;
try_files $uri $uri/ /index.php$is_args$query_string;
}
location ~ .php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.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;
}
}

Nginx配置主要是对访问路由做规则匹配或重写,然后根据规则匹配分发到php-cgi。还有日志文件的规定,这个日志文件是基于当前Nginx所在目录来的。Nginx配置的正则匹配也是有很多的细节,等随后再研究。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇