对于框架的 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;
}

你可能感兴趣的:(对于框架的 pathinfo 的 nginx 配置)