phpEnv配置Nginx隐藏PHP后缀 phpEnv美化URL教程
phpEnv中Nginx隐藏.php后缀,核心在location/内用try_files$uri$uri/$uri.php?$args实现无后缀URL自动映射PHP。与ThinkPHP不同,需在PHP处理块加try_files$uri=404防源码泄露。配置文件在C:\phpEnv\nginx\vhosts\,修改后重载。
phpEnv 下给 Nginx 配隐藏 .php 后缀,说穿了就是让 /about 这样的请求自动映射到 /about.php,而不是扔给你一个 404。这跟 ThinkPHP 那种隐藏 index.php 的思路完全是两码事——前者是“按需补后缀”,后者是“强制兜底到入口文件”。所以直接拿 ThinkPHP 的 try_files $uri $uri/ /index.php?s=$uri 往上一套,肯定翻车。
nginx 配置里必须用 try_files $uri $uri/ $uri.php?$args
这是最简且可靠的方案,适用于 phpEnv 默认结构(网站根目录即 PHP 文件所在目录)。
$uri先找真实文件——用户访问/contact,Nginx 就去查有没有叫contact(无后缀)的文件$uri/再找同名目录,比如/blog/→ 匹配blog/目录$uri.php?$args最后 fallback 到contact.php,并把原始查询参数(如?id=123)原样传过去- 注意:
$is_args不需要手写,?$args已经自带逻辑——有参数才加?,没参数就只拼.php
配置位置要写在 server 块内,而不是 location ~ \.php$ 里面:
location / { try_files $uri $uri/ $uri.php?$args;}
别漏掉 PHP 处理块的 try_files 安全兜底
如果只改了 location /,但没动 PHP 处理块,可能会出现两种让人摸不着头脑的情况:
- 访问
/admin.php正常,但访问/admin却返回空白页(实际上是 200 + 空响应) - 某些路径下 PHP 脚本被当作静态文件下载,源码直接暴露
根本原因是:Nginx 在匹配 location ~ \.php$ 时,如果请求 URI 是 /admin,它根本不会进这个块——所以必须确保所有 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;}
这行 try_files $uri =404 意味着:只有真实存在的 .php 文件才允许执行;否则直接 404,不给任何下载源码的机会。
phpEnv 的 nginx.conf 文件位置和重载方式
phpEnv 默认把站点配置放在 C:\phpEnv\nginx\vhosts\ 下,每个站点一个 conf 文件(比如 myapp.conf)。尽量不要去改主 nginx.conf,否则以后升级 phpEnv 会被覆盖掉。
- 修改完配置后,用 phpEnv 控制面板点「重载 Nginx」,或者手动执行:
C:\phpEnv\nginx\nginx.exe -s reload - 如果提示
nginx: [emerg] unknown directive "try_files",说明你用的是极老版本 Nginx(<1....),升级就好了 - Windows 下路径分隔符用正斜杠
/,别用反斜杠\;$uri.php中间不能有空格
真正的坑往往不在规则本身,而是改完没重载、重载失败没看日志、或者把配置塞进了错误的 location 块里。phpEnv 的 Nginx 日志默认在 C:\phpEnv\nginx\logs\error.log,出问题第一时间翻它,比猜配置管用得多。


































