对于框架的 pathinfo 的 nginx 配置

ECOS采用pathinfo做资源定位,所以要求$_SERVER环境变量中必须要有PATHINFO或则ORGI_PATHINFO

一般在apache或者iis下都没有什么问题,但是在nginx下需要对配置文件做一些设置才可以

把下面的代码保存为pathinfo.conf文件,存放在nginx的conf目录下

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 $document_root$real_script_name
;
fastcgi_param SCRIPT_NAME $real_script_name
;
fastcgi_param PATH_INFO $path_info
;

在站点的php引擎调用段的最下面包含这个文件就行了。下面提供一个真实的样例:

主配置文件

server
{
listen
80;
server_name
192.168.6.141;
index index
.html index.htm index.php;
root
/srv/http;
autoindex off
;

location
~ .*\.php
{
include php_fcgi
.conf;
include pathinfo
.conf;
}

location
~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires
30d;
}

location
~ .*\.(js|css)$
{
expires
1h;
}

access_log off
;
location
/nginx_status {
stub_status on
;
access_log off
;

}
}

这个地方有一个地方需要注意,就是对php文件的捕获必须是这样的形式

location ~ .*\.php

以往的

location ~ .*\.php$

形如/index.php/shopadmin/xxxx/yyyy这样的请求将不会进入php fastcgi处理器。

rewrite

如果想把index.php也隐藏掉,可用下面的rewrite规则

location / {
if (!-e $request_filename) {
rewrite
^/(.+\.(html|xml|json|htm|php|jsp|asp|shtml))$ /index.php/$1 last;
}
}

location
~ .*\.php
{
include php_fcgi
.conf;
include pathinfo
.conf;
}

你可能感兴趣的:(nginx,PHP,框架,json,asp)