Nginx 下 ThinkPHP URL 的 PATHINFO 与 REWRITE 重写 配置方法

尝试了下 ThinkPHP 框架, 版本为 3.2.3。本文内容为解决 Nginx 下 ThinkPHP URL 模式中所用到的 PATHINFO 与 REWRITE 模式的配置问题。并在 Mac OS X 10.10 下 Nginx 1.8.0 + PHP 5.6.8 下测试通过。理论同样适用于各版本的 Linux 系统中。

PATHINFO 与 REWRITE 模式在表现上的不同在于浏览器的 URL 地址栏中, 以访问 Home 模块, User 控制器, login 操作为例:

PATHINFO 下的 URL: http://laoji.org/index.php/Home/User/login REWRITE 下的 URL: http://laoji.org/Home/User/login

Nginx 开启 PATHINFO

在这之前, 笔者也到搜索引擎上看了几篇关于 Nginx 配置 PATHINFO 的方法, 感觉有点乱, 乱的原因主要是由于 Nginx 没有给予像 Apache 那样一个参数即可开启 PATHINFO 的良好支持, 因此出现了各种 Nginx 下开启 PATHINFO 的解法。

这里提供的是参阅 Nginx 官方文档并结合实测可用后的 PATHINFO 的方案。去除不必须的注释, Nginx 开启 PATHINFO 的 server 部分配置如下:

server {
listen 80;
server_name localhost;

location / {
root /wwwroot/laoji.org; # 你的 TP 框架 index.php 所在目录, 记得用 / 分割路径
index index.php index.html index.htm;
}

# …

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ ^(.+.php)(.*)$ {
fastcgi_split_path_info ^(.+.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;

fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME? $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

这种做法的原理是当请求的访问路径中含有 .php 时, 通过正则表达式构造出 PATHINFO, 并设置到 fastcgi 的参数 PATH_INFO 中。

代码中匹配 PATH_INFO 的正则表达式来源于 Nginx 官方文档中的写法。参见:http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_split_path_info

PATHINFO 模式是 ThinkPHP 默认的 URL 模式, 因此不需要修改 ThinkPHP 的默认配置即可使用http://serverName/index.php/模块/控制器/操作 方式访问。


URL REWRITE 模式

REWRITE 模式也称 URL重写, 可用于隐藏 PATHINFO 模式路径中的 index.php, 开启 REWRITE 模式的 Nginx 配置为:

server {
listen 80;
server_name laoji.org;

location / {
root /wwwroot/laoji.org;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?s=$uri; # 核心
}

# …

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME? $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

配置完成后修改 ThinkPHP 的 URL 模式为 REWRITE, 编辑配置文件 ThinkPHP/Conf/convention.php 中修改 URL_MODEL 参数值为 2 (REWRITE 模式)即可通过 http://serverName/模块/控制器/操作 方式访问。

腾讯云限时秒杀【点击购买】

搬瓦工,CN2高速线路,1GB带宽,电信联通优化KVM,延迟低,速度快,建站稳定,搬瓦工BandwagonHost VPS优惠码BWH26FXH3HIQ,支持<支付宝> 【点击购买】!

Vultr$3.5日本节点,512M内存/500G流量/1G带宽,电信联通优化,延迟低,速度快【点击购买】!

阿里云香港、新加坡VPS/1核/1G/25G SSD/1T流量/30M带宽/年付¥288【点击购买】

Nginx 下 ThinkPHP URL 的 PATHINFO 与 REWRITE 重写 配置方法

`微信`扫码 加好友

链接到文章: https://gkxyz.com/nginx-xia-thinkphp-url-de-pathinfo-yu-rewrite-zhongxie-peizhifangfa.html

推荐站点

  • RAKsmart

    主机商介绍:RAKsmart是知名的美国服务器租用商,包括美国站群服务器、美国cn2服务器、香港服务器等热门产 […]

  • Vultr

    Vultr Global Cloud Hosting – Brilliantly Fast SSD […]

  • 芒果TV-天生青春

    芒果TV-大家都在看的在线视频网站-热门综艺最新电影电视剧在线观看

  • 阿里云-为了无法计算的价值

    阿里云——阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司之一。提供免费试用、云服务器、云数据库、云 […]

  • DigitalOcean – The developer cloud

    Helping millions of developers easily build, test, mana […]

  • 优酷 – 你的热爱 正在热播

    视频服务平台,提供视频播放,视频发布,视频搜索,视频分享

评论已关闭