在 LNMP(Linux + Nginx + MySQL + PHP) 环境下,开启 pathinfo 主要是 Nginx 配置 的问题(PHP 本身一般已支持)。
下面以 LNMP 一键包(lnmp.org) 为例说明,其他方式原理相同。
例如:
http://example.com/index.php/article/123
index.php 是入口/article/123 是 pathinfo路径一般是:
/usr/local/nginx/conf/vhost/域名.conf
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 自带 pathinfo 配置:
修改 vhost 文件,把:
include enable-php.conf;
改成:
include enable-php-pathinfo.conf;
然后重启 Nginx:
lnmp nginx reload
新建 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
fastcgi_split_path_infolocation ~ \.php 写错fastcgi_param PATH_INFOtry_files 重写,不需要 pathinfo如果你用的是 ThinkPHP / WordPress / 某个框架,可以告诉我,我可以给你对应配置。