nginx伪静态隐藏url后缀推荐用try_files实现.php映射,简洁安全;也可用rewrite+last实现.html→.php映射,或location=精确匹配固定页面。需避免顶层rewrite、确保php处理块存在,禁用redirect。

隐藏 URL 后缀(比如把 /about.php 变成 /about 或 /about.html)是 Nginx 伪静态最常用场景之一。核心不是“跳转”,而是内部重写,浏览器地址栏不变,后端仍执行真实脚本。
推荐用 try_files 隐藏 .php 后缀(简洁安全)
这是最轻量、最不容易出错的方式,无需正则,也不依赖 if:
- 在
location /或具体路径块中添加:
try_files $uri $uri/ $uri.php$is_args$args;
}
含义:先找真实文件($uri),再找目录($uri/),都找不到就尝试加 .php 后缀执行($uri.php),并保留原始查询参数($is_args$args)。访问 /contact 会自动执行 /contact.php。
用 rewrite + last 实现 .html → .php 映射
适合明确要统一用 .html 作为对外后缀的场景(如 CMS 或静态化输出):
- 只对带
.html的请求生效,避免误伤图片、CSS 等资源:
rewrite ^/(.+)\.html$ /$1.php last;
}
关键点:加 last 是为了让重写后的 /xxx.php 能重新进入 location 匹配流程,最终被 location ~ \.php$ 捕获并交给 PHP-FPM 处理。
精确匹配几个固定页面(高性能、无正则开销)
如果只隐藏首页、关于页、联系页等少数几个,用 location = 最高效:
location = /about.html { rewrite ^ /about.php last; }
location = /contact.html { rewrite ^ /contact.php last; }
这种写法不走正则,匹配速度最快,也完全规避了循环重写风险。
注意事项和避坑提醒
以下几点容易导致 404 或 500 错误,务必检查:
-
别把 rewrite 写在 server 级别顶层:否则
/logo.png也可能被错误重写为/logo.png.php -
确保有对应处理 PHP 的 location,例如:
location ~ \.php$ { fastcgi_pass ... },否则 rewrite 后无法执行 -
不用
redirect或permanent:它们会发起 301/302 跳转,暴露真实后缀,不是伪静态 -
Windows 下路径一律用正斜杠(
/index.php),不要写C:\xx\index.php











