一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx 中 URL 重写如何隐藏 PHP 或 HTML 后缀提升网址美观度

时间:2026-08-22 12:07:48 编辑:袖梨 来源:一聚教程网

Nginx 无法隐藏域名后缀,但可通过 try_files 指令安全隐藏 URL 中的 .php 或 .html 后缀,或通过 /index.php 回退实现 index.php 隐藏;推荐用 $uri $uri/ $uri.php$is_args$args 顺序查找,避免 rewrite 循环与路由失效。

Nginx 本身不修改浏览器地址栏显示的域名后缀(如 .com),但能有效隐藏 URL 路径中的 .php.html 后缀,让访问链接更简洁、专业,也利于 SEO 和安全防护。关键不是靠 rewrite 硬套,而是用 try_files 主动查找 + 合理回退,避免重写循环和 404。

用 try_files 隐藏 .php 后缀(推荐)

这是最稳定、无副作用的方式,适合普通 PHP 页面(非框架项目):

  1. 在 server 或 location 块中添加:
location / {

try_files $uri $uri/ $uri.php$is_args$args;

}

  1. $uri:先查是否存在同名文件(如 /about → 查找 about
  2. $uri/:再查是否为真实目录(如 /blog/ → 查找 blog/ 目录)
  3. $uri.php:都失败时,自动尝试加 .php(/about → 实际执行 about.php
  4. $is_args$args:保留原始查询参数(如 /user?id=123 → 传给 user.php?id=123)

用户始终看到 https://site.com/about,后台静默运行 about.php,无需改代码。

用 try_files + 命名 location 隐藏 .html 后缀

类似逻辑,只需把 .php 换成 .html,并确保 HTML 文件真实存在:

location / {

try_files $uri $uri/ $uri.html;

}

  1. 访问 /news → 尝试 news、news/、news.html(按顺序)
  2. 只要 news.html 存在,就直接返回,地址栏不变
  3. 比用 rewrite ^(.*)$ $1.html last 更安全,不会触发无限循环

隐藏 index.php(常用于 Laravel/ThinkPHP)

这不是“去掉后缀”,而是让所有动态请求走统一入口,彻底不暴露 index.php:

location / {

try_files $uri $uri/ /index.php?$query_string;

}

  1. 静态资源(JS/CSS/图片)正常直出
  2. 不存在的路径(如 /admin/user)内部转发到 /index.php?query_string,由 PHP 框架解析路由
  3. 必须配合 PHP 开启 pathinfo 或正确处理 QUERY_STRING,否则路由失效

为什么不建议直接用 rewrite 加后缀?

rewrite ^(.*)$ $1.php last; 这类写法风险高:

  1. 容易造成重写循环:/test → /test.php → 再匹配又加 .php → /test.php.php → 404 或 500
  2. 无法区分真实存在的 .php 文件和需要补全的路径,逻辑混乱
  3. 对框架项目会绕过入口文件,破坏路由机制,导致 404
  4. 调试困难,日志里全是重复重写记录

真正干净的 URL 美化,靠的是精准的文件存在性判断,而不是强行改写路径。

热门栏目