小知识:Ubuntu下Nginx配置ThinkPHP的Pathinfo和URl Rewrite模式

概述

在上一篇文章Nginx配置Thinkphp支持URL Rewrite中已经介绍了如何配置Nginx支持ThinkPHP的URL Rewrite,但是上文针对的是Centos平台,这次因为某些特殊的原因,服务器环境必须用ubuntu,本来以为和Cetons中一模一样,但是配置完了发现不能使用,所以就百度了一些文章。

配置方法 TP官方解决方案

复制代码代码如下:

location ~ .php

        {

                #原有代码

                #定义变量 $path_info ,用于存放pathinfo信息

                set $path_info “”;

                #定义变量 $real_script_name,用于存放真实地址

                set $real_script_name $fastcgi_script_name;

                #如果地址与引号内的正则表达式匹配

                if ($fastcgi_script_name ~ “^(.+?\.php)(/.+)$”) {

                        #将文件地址赋值给变量 $real_script_name

                        set $real_script_name $1;

                        #将文件地址后的参数赋值给变量 $path_info

                        set $path_info $2;

                }

                #配置fastcgi的一些参数

                fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;

                fastcgi_param SCRIPT_NAME $real_script_name;

                fastcgi_param PATH_INFO $path_info;

        }

这样,nginx服务器就可以支持pathinfo了。但是如果要支持ThinkPHP的URL_MODE设置为2的模式,还需要配置rewrite规则。找到access_log语句,在其上方加上以下语句:

复制代码代码如下:

#如果请求既不是一个文件,也不是一个目录,则执行一下重写规则

    if (!-e $request_filename)

    {

            #地址作为将参数rewrite到index.php上。

            rewrite ^/(.*)$ /index.php/$1;

            #若是子目录则使用下面这句,将subdir改成目录名称即可。

            #rewrite ^/subdir/(.*)$ /subdir/index.php/$1;

    }

网友解决方案

复制代码代码如下:

location / {

                root /var/www;

                # First attempt to serve request as file, then

                # as directory, then fall back to index.html

                try_files $uri $uri/ /index.html;

                # Uncomment to enable naxsi on this location

                # include /etc/nginx/naxsi.rules

                if (!-e $request_filename)

                {

                        rewrite ^/PHPParser/(.*)$ /PHPParser/index.php?s=$1 last;

                        break;

                }

        }

然后在localhost ~ .php{}配置栏目中添加如下两行:

复制代码代码如下:

fastcgi_split_path_info ^(.+\.php)(.*)$;                             

fastcgi_param PATH_INFO $fastcgi_path_info;

完整配置如下:

复制代码代码如下:

location ~ \.php$ {

                root /var/www;

                try_files $uri = 404;

                fastcgi_split_path_info ^(.+\.php)(/.+)$;

        #       # NOTE: You should have “cgi.fix_pathinfo = 0;” in php.ini

        #

        #       # With php5-cgi alone:

                #fastcgi_pass 127.0.0.1:9000;

                fastcgi_split_path_info ^(.+\.php)(.*)$;

                fastcgi_param PATH_INFO $fastcgi_path_info;

        #       # With php5-fpm:

                fastcgi_pass unix:/var/run/php5-fpm.sock;

                fastcgi_index index.php;

                include fastcgi_params;

        }
声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:Linux 运维需要掌握的 17 个实用技巧

2023-5-5 1:54:48

建站知识

小知识:这里有好用又好看的Linux操作系统推荐

2023-5-5 2:03:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索