要让nginx正确解析php并支持无index.php的友好url,必须同时满足:root指向public目录、fastcgi_param script_filename路径准确、伪静态规则触发回退至入口文件。

要让Nginx正确解析PHP文件并支持无index.php的友好URL(如/user/login),必须同时满足三个硬性条件:root指向public目录、fastcgi_param SCRIPT_FILENAME路径拼接准确、伪静态规则触发请求回退至入口文件。缺一不可,否则会出现“No input file specified”或404。
确认并设置正确的项目根目录
这一步是后续所有配置生效的前提,【root指令必须写在server块内,且值为项目public目录的绝对路径】。写错位置或指向web根而非public,会导致SCRIPT_FILENAME拼出不存在的.php路径。
打开你的站点配置文件(phpEnv用户路径为C:/phpEnv/nginx/vhost/your-site.conf;宝塔用户在/www/server/panel/vhost/nginx/your-site.conf),定位到server { … }块内部。
查找root行,将其修改为:root C:/your/project/path/public;(Windows下用正斜杠)或 root /var/www/tp6/public;(Linux下)。
同时确认index指令存在且index.php排第一:index index.php index.html index.htm;
保存后,必须通过控制面板点击“重启Nginx”,手动执行nginx -s reload在phpEnv中无效。
配置PHP处理块与关键FastCGI参数
PHP能否被正确执行,取决于location ~ \.php$块中是否传递了真实脚本路径。漏掉SCRIPT_FILENAME或用错变量,就会报错“No input file specified”。
在server块内找到或新增以下PHP处理块:
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
【务必删除fastcgi_split_path_info相关行】——它会干扰ThinkPHP6/Laravel对s=参数的解析,导致路由失效或重定向循环。
若使用phpEnv,还需显式补全PATH_INFO支持:在fastcgi_pass下方、include fastcgi_params上方插入一行:
fastcgi_param PATH_INFO $fastcgi_path_info;
添加伪静态规则(三选一)
根据你使用的环境选择对应方案,不要混用。所有规则都必须放在location ~ \.php$之前,否则if不生效、try_files不触发。
方法一:推荐用于宝塔面板(if+rewrite)
进入宝塔 → 网站 → 对应站点 → 设置 → 伪静态 → 粘贴以下内容:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
}
}
last不可改为break或redirect,只有last才能让重写后的请求重新匹配location块,最终落入PHP处理流程。
方法二:标准Nginx手动配置(try_files)
在server块内、location ~ \.php$之前插入:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
注意:若项目部署在子目录(如http://localhost/tp6/),需将fallback路径改为/tp6/index.php?$query_string,否则路由参数丢失。
方法三:phpEnv专用(强制if+last+PATH_INFO)
phpEnv内置Nginx版本老旧,try_files行为异常,必须用if:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
}
}
这一步操作起来很简单,直接把上面四行复制进配置文件对应位置就行。但若没同步补全PATH_INFO参数,TP6启动时会提示“URL pathinfo not supported”。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











