让Nginx支持thinkPHP

先吐吐槽
最近换了工作,新公司使用了thinkPHP这个框架,且不说thinkPHP这个框架怎么样吧,也不说我对thinkPHP的个人意见,既然要用这玩应儿,那咱也没办法对不?
好了,言归正传。。。

首先,大家都知道,nginx本身并不像Apache一样支持pathinfo,而我们使用thinkPHP的时候,一般都喜欢用pathinfo的URL模式,为什么?

为什么都喜欢用pathinfo这种路由?
1.www.xxx.com/goods/list 这种路由模式很漂亮有木有?如果你不觉得,那容我自嗨一把。
2.www.xxx.com/goods/list 这种路由模式会更加容易被搜索引擎所接受,也就是搜索引擎在收录网页的时候更喜欢pathinfo。


我的解决思路

1.既然Nginx不支持pathinfo,那么可不可以让它支持呢?
答:当然可以,点击这里 go!!!,注意:此种配置有点长,如果不想耽误时间可以选择下面这种

2.配置Nginx的rewrite
首先,什么是rewrite?
看图,看到请求是先到达了服务器,然后才到达程序文件,那么既然如此,我们可以在请求还没到达程序的时候做点文章,让原本并不认识pathinfo的Nginx仍然可以正常工作,具体的rewrite请看下方我的配置。
服务器执行 (1)

我的操作步骤
1.新建一个子的Nginx配置文件
大家知道,Nginx有个主的配置文件,叫做nginx.conf,此次我的操作是新建了一个子的配置文件,放在了./vhost/目录下,你可以定义为www.xxx.com.conf(其中xxx可以替换成你的域名)。
当然并不一定非要www.xxx.com.conf,如果你没有域名,也可以192.168.33.10.conf

2.打开www.xxx.com.conf文件
vim www.xxx.com.conf,原本的结构是这个样子的,有可能你的会跟我一样,但是没关系
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
server
{
listen 80;
server_name www.xxx.com xxx.com;
index index.php index.html index.htm;
#这里要对应你的项目目录
root /home/wwwroot/default/xxx

location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
#include pathinfo.conf;
}
location /{
try_files $uri $uri/ /index.php?$query_string;
}
location /nginx_status {
stub_status on;
access_log off;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}

location ~ .*\.(js|css)?${
expires 12h;
}
access_log /home/wwwlogs/xxx/access.log;
}
[/cc]
注意:xxx,需要配置成符合你的情况,还有root 那一项需要设置成你的项目目录

3.将配置文件中location / {…}修改成这样
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
location /{
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
#try_files $uri $uri/ /index.php?$query_string;
}
[/cc]
注意:if和(!-e $request_filename)中间一定要有一个空格噢~

4.修改后的www.xxx.com.conf文件为
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
server
{
listen 80;
server_name www.xxx.com xxx.com;
index index.php index.html index.htm;
root /home/wwwroot/default/xxx

location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
#include pathinfo.conf;
}
location /{
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
#try_files $uri $uri/ /index.php?$query_string;
}
location /nginx_status {
stub_status on;
access_log off;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}

location ~ .*\.(js|css)?${
expires 12h;
}
access_log /home/wwwlogs/xxx/access.log;
}
[/cc]

OK,重启Nginx试试吧。

让Nginx支持thinkPHP
Tags:     

发表评论

电子邮件地址不会被公开。 必填项已用*标注