小刀博客
扫描关注小刀博客

手机扫描二维码

Windows 安装nginx和php,可解决thinkphp中文url乱码问题

小刀博客2018-04-13环境与配置 1326

前段时间在学习thinkphp5,并动手制作了一个电影网站,考虑到搜索引擎收录问题,所以就用了自定义路由模式将所有的url都伪静态化,包括搜索页面也全都伪静态化。结果发现,伪静态之后,URL中的中文并不能完全兼容,个别汉字还是有乱码的情况出现,刚开始还是以为是thinkphp这框架没写好导致,调试了半天发现原来是$_SERVER这个PHP的系统变量的问题,看来是PHP或apache的问题。

在网上找了很多资料,有很多人都说,apache在中文处理上还不完美,可以考虑换成nginx,去官网一看,还真有windows版本可以下载(百度很容易找到,就不贴网址了),我下载了最新版本1.13.12的nginx,一看只有3M多,还真是和网上说的一样,绝对的轻量级web server,接下来说下安装步骤:

安装nginx真的是很简单,解压后直接双击运行nginx.exe就可以,当然前提是80端口不能被占用,如果占用,要去配置文件改成其他端口(比如81,82)。因为nginx和PHP是分别运行的,所以基本上运行nginx不会出现什么错误,主要是配置PHP环境需要点耐心,下面来配置PHP

刚接触nginx,花了很长时间才明白了里面的运行原理,刚说了nginx和apache不一样,nginx和PHP是分别单独运行的,用白话来说就是当nginx收到PHP请求时,就将此请求转发给php_cgi来处理,所以在配置PHP之前,我们先将PHP_CGI运行起来

以管理员模式打开CMD命令行,用CD命令切换到PHP的根目录,执行命令:php-cgi.exe -b 127.0.0.1:9000-c ,这样php_cgi程序就监听了9000端口,一旦此端口有请求就会处理,命令执行完成后窗口不能关闭,接下来到nginx中来配置PHP

在conf目录中找到配置文件nginx.conf,在server之间添加下方代码:

location ~ \.php$ {
            root           D:/wwwroot/80www;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

root选项修改成自己的网站目录即可,其他不用改,配置完成之后,执行命令:nginx -s reload ,重新加载配置文件即可,不需要像apache那样重启服务,为了方便启动和停止nginx与php_cgi,将命令写入批处理文件中,这样就可以一键启动,一键停止。

文件名:start.bat(启动服务),记事本打开输入命令:

start php_cgi.bat
start nginx.bat

文件名:stop.bat(停止服务),输入命令:

echo Stopping nginx...    
taskkill /F /IM nginx.exe > nul
echo Stopping PHP FastCGI...  
taskkill /F /IM php-cgi.exe > nul
exit

文件名:php_cgi.bat,输入命令:

set PHP_FCGI_MAX_REQUESTS=1000
cd..
echo PHP FastCGI Starting ...
%cd%/php5/php-cgi.exe -b 127.0.0.1:9000-c

文件名:nginx.bat,输入命令:

cd..
echo Nginx Starting...
%cd%/nginx/nginx.exe -p "%cd%/nginx/"

将这四个批处理文件都放在nginx的根目录下,当然PHP和nginx要在同一目录中(我习惯放在D盘Program目录下),否则批处理命令需要修改,否则不用修改,可以直接使用。

文章关键词
PHP
nginx
thinkphp
发表评论