温馨提示×

lnmp怎样开启pathinfo

小樊
40
2026-08-31 19:12:57
栏目: 编程语言

在 LNMP(Linux + Nginx + MySQL + PHP) 环境下,开启 pathinfo 主要是 Nginx 配置 的问题(PHP 本身一般已支持)。

下面以 LNMP 一键包(lnmp.org) 为例说明,其他方式原理相同。


一、什么是 pathinfo

例如:

http://example.com/index.php/article/123
  • index.php 是入口
  • /article/123 是 pathinfo

二、Nginx 开启 pathinfo(关键)

1️⃣ 修改站点配置文件

路径一般是:

/usr/local/nginx/conf/vhost/域名.conf

2️⃣ 典型正确配置(推荐)

server {
    listen 80;
    server_name example.com;
    root /home/wwwroot/example.com;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_pass   unix:/tmp/php-cgi.sock;
        fastcgi_index  index.php;
        include fastcgi.conf;

        # 开启 pathinfo
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

✅ 重点就是这两行:

fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;

三、LNMP 一键包更简单的方法(推荐)

LNMP 自带 pathinfo 配置:

方法一:启用 pathinfo 配置

修改 vhost 文件,把:

include enable-php.conf;

改成:

include enable-php-pathinfo.conf;

然后重启 Nginx:

lnmp nginx reload

四、测试 pathinfo 是否生效

新建 test.php:

<?php
echo 'SCRIPT_NAME: ' . $_SERVER['SCRIPT_NAME'] . PHP_EOL;
echo 'PATH_INFO: ' . $_SERVER['PATH_INFO'] . PHP_EOL;

访问:

http://example.com/test.php/abc/123

输出应包含:

PATH_INFO: /abc/123

五、常见问题

❌ 404 或 下载 php

  • 没加 fastcgi_split_path_info
  • location ~ \.php 写错

❌ PATH_INFO 为空

  • 没加 fastcgi_param PATH_INFO

六、ThinkPHP / Laravel 注意

  • ThinkPHP:需要 pathinfo
  • Laravel:推荐 try_files 重写,不需要 pathinfo

如果你用的是 ThinkPHP / WordPress / 某个框架,可以告诉我,我可以给你对应配置。

0 踩