发布于2026-07-08 阅读(0)
扫一扫,手机访问
phpEnv 下给 Nginx 配隐藏 .php 后缀,说穿了就是让 /about 这样的请求自动映射到 /about.php,而不是扔给你一个 404。这跟 ThinkPHP 那种隐藏 index.php 的思路完全是两码事——前者是“按需补后缀”,后者是“强制兜底到入口文件”。所以直接拿 ThinkPHP 的 try_files $uri $uri/ /index.php?s=$uri 往上一套,肯定翻车。
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;}
try_files 安全兜底如果只改了 location /,但没动 PHP 处理块,可能会出现两种让人摸不着头脑的情况:
/admin.php 正常,但访问 /admin 却返回空白页(实际上是 200 + 空响应)根本原因是: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,不给任何下载源码的机会。
nginx.conf 文件位置和重载方式phpEnv 默认把站点配置放在 C:\phpEnv\nginx\vhosts\ 下,每个站点一个 conf 文件(比如 myapp.conf)。尽量不要去改主 nginx.conf,否则以后升级 phpEnv 会被覆盖掉。
C:\phpEnv\nginx\nginx.exe -s reloadnginx: [emerg] unknown directive "try_files",说明你用的是极老版本 Nginx(<1....),升级就好了/,别用反斜杠 \;$uri.php 中间不能有空格真正的坑往往不在规则本身,而是改完没重载、重载失败没看日志、或者把配置塞进了错误的 location 块里。phpEnv 的 Nginx 日志默认在 C:\phpEnv\nginx\logs\error.log,出问题第一时间翻它,比猜配置管用得多。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8