zoukankan      html  css  js  c++  java
  • Nginx支持PHP的CI框架

    1.找到CI库的配置文件修改

    $config['base_url']    = 'http://test.example.com';
    $config['uri_protocol'] = 'PATH_INFO';
    2.找到NGINX配置.在SERVER段中添加如下代码段

    location /index.php{
                                  fastcgi_pass  unix:/tmp/php-cgi.sock;
                                  fastcgi_param SCRIPT_FILENAME /home/wwwroot/index.php;
                                  fastcgi_param PATH_INFO $fastcgi_path_info;
                                  fastcgi_split_path_info ^(.+.php)(.*)$;
                                  fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
                                  include fcgi.conf;
                }
    3.如果要做跳转的话,(比如:http://test.example.com/index.php/test,跳转
    http://test.example.com/test.)可以server 段中添加如下配置
    location /{
                      if (-f $request_filename) {
                                  expires max;
                                  break;
                          }
                          if (!-e $request_filename) {
                                  rewrite ^/(.*)$ /index.php/$1 last;
                          }
      }


    *****************************************************************************


    前一段时间为了 PATH_INFO 问题搞得郁闷,来回忆下原来的配置(以CodeIgniter框架的配置为例):

    server {
    	listen       80;
    	server_name  test.local;
    
    	location / {
    		root   /www/test;
    		index  index.html index.htm index.php;
    		rewrite ^/$ /index.php last;
    		rewrite ^/(?!index.php|robots.txt|images|js|styles)(.*)$ /index.php/$1 last;
    	}
    
    	location ~ .php($|/) {
    		root	   /www/test;
    
    		set $script     $uri;
    		set $path_info  "";
    
    		if ($uri ~ "^(.+?.php)(/.*)$") {
    		    set $script     $1;
    		    set $path_info  $2;
    		}
    
    		fastcgi_index	index.php;
    		fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    		fastcgi_param   PATH_INFO       $path_info;
    		fastcgi_pass    unix:/tmp/php-fpm.sock;
    		include	fastcgi_params;
        	}
    }

    虽然可以实现 PATH_INFO 了,但是还是有缺陷,URL 中的中文不会被 urldecode。

    好在,0.7.31 版本以上的 Nginx 新增了fastcgi_split_path_info 这个指令,现在配置起来清晰多了:

    server {
    	listen       80;
    	server_name  test.local;
    
    	location / {
    		root   /www/test;
    		index  index.html index.htm index.php;
    		rewrite ^/$ /index.php last;
    		rewrite ^/(?!index.php|robots.txt|images|js|styles)(.*)$ /index.php/$1 last;
    	}
    
    	location ~ ^(.+.php)(.*)$ {
    		root	   /www/test;
    
    		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;
    		fastcgi_pass    unix:/tmp/php-fpm.sock;
    		include	fastcgi_params;
        }
    }

    指令的具体帮助请参考官方WIKI:

    http://wiki.nginx.org/NginxHttpFcgiModule#fastcgi_split_path_info

    – EOF –


  • 相关阅读:
    荔枝微课基础架构的演进与实践
    如何制作出让女朋友满意的大片
    SSL 证书变革之时已至,这些变化你都清楚吗?
    浅谈 FTP、FTPS 与 SFTP
    HTTP/3 来了,你了解它么?
    看视频常见的 720p、1080p、4k,这些分辨率到底包含了什么
    element-ui表单验证遇到v-if时不生效
    声纹识别算法阅读之CN-Celeb
    apply-cmvn&apply-cmvn-online&apply-cmvn-slide
    语音识别算法阅读之TDNN-F
  • 原文地址:https://www.cnblogs.com/moqiang02/p/4061244.html
Copyright © 2011-2022 走看看