Nginx+PHP 部署 CMS和ThinkPHP框架商城

记录一下Nginx服务器配置开源CMS+开源PHP商城的方法。
CMS部署在根目录
商城部署在store的虚拟目录

PHP商城的配置遇到一些麻烦,商城所采用的是ThinkPHP框架,访问路径类似于:http://www.****.cn/store/index.php/home/index.html 需要解析出/home/index.html 作为模块名称,否则商城无法正确的识别二级目录和模块。

先看最后的配置结果:

server {
	listen 80;
	server_name www.****.cn;
	location / {
		root /home/xxx_cms;
		index index.php;
		rewrite ^(.*).html$ /index.php;
	}
	location ~ \.php$ {
		fastcgi_pass unix:/run/php/php5.6-fpm.sock;
		fastcgi_index index.php;
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME /home/xxx_cms/$fastcgi_script_name;
	}
	
	
	location /store/ {
		alias /home/xxx_store/public/;
		index index.php;
	}
	location ~ /store/.*\.php.* {

		set $path_info "";
		set $real_script_name "index.php";
		if ($fastcgi_script_name ~ "^/store/(.+?\.php)(/.+)$") {
			set $real_script_name $1;
			set $path_info $2;
		}

		fastcgi_index index.php;
		include fastcgi_params;


		fastcgi_pass unix:/run/php/php5.6-fpm.sock;
		fastcgi_param SCRIPT_FILENAME /home/xxx_store/public/$real_script_name;
		fastcgi_param PATH_INFO $path_info;
	}
}

CMS的配置比较简单,页面都以xxx.html格式结尾,直接做url重写到index.php就能识别,配置商城时比较麻烦,记录一下thinkPHP商城的思路:
首先配置虚拟目录,保证静态资源可以访问

	location /store/ {
		alias /home/xxx_store/public/;
		index index.php;
	}

这里要注意配置虚拟目录 使用 alias而不是root

再增加一个location 用正则判断是解析store目录下的php文件
这里需要把store/index.php/home/...拆分一下,
store/index.php 中的store剔除掉,发送index.php给php-fpm进行解析,并把/home/...作为参数放到PHP_INFO里,这样thinkPHP才能正确的找到需要调用的模块。

你可能感兴趣的:(Nginx)