Nginx 开启 PATHINFO
在这之前, 笔者也到搜索引擎上看了几篇关于 Nginx 设置 PATHINFO 的要领, 感受有点乱, 乱的原因主要是由于 Nginx 没有给以像 Apache 那样一个参数即可开启 PATHINFO 的精采支持, 因此呈现了各类 Nginx 下开启 PATHINFO 的解法。
这里提供的是参阅 Nginx 官方文档并团结实测可用后的 PATHINFO 的方案。去除不必需的注释, Nginx 开启 PATHINFO 的 server 部门设置如下:
server {
listen 80;
server_name localhost;
location / {
root D:/Projects/Demo/thinkphp; # 你的 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)(.*)$ {
root D:/Projects/Demo/thinkphp; # 你的 TP 框架 index.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 localhost;
location / {
root D:/Projects/Demo/thinkphp; # 你的 TP 框架 index.php 地址目次, 记得用 / 支解路径
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$ {
root D:/Projects/Demo/thinkphp; # 你的 TP 框架 index.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/模块/节制器/操纵 方法会见。
,