Nginx无法隐藏域名后缀,但可通过try_files+rewrite隐藏URL中的index.php或.php后缀;index指令仅指定默认首页,不改写URL;需注意PHP配置、静态资源分离及避免重写循环。

nginx 本身不支持“隐藏域名后缀”,因为域名后缀(比如 .com、.org)是 DNS 解析和浏览器地址栏显示层面的概念,服务器无法也不应干预用户看到的完整域名。你真正想实现的,通常是:隐藏 URL 路径中的文件后缀(如 .php、.html)或入口脚本(如 index.php),让访问看起来更简洁、更友好。
用 index 指令处理默认首页
index 指令只控制当用户访问一个目录时,Nginx 自动尝试匹配哪些文件作为首页,它本身不改写 URL,也不影响路径后缀显示。
例如:
-
index index.html index.php;表示访问/或/blog/时,Nginx 会依次查找index.html、index.php并返回; - 但用户仍需输入
https://example.com/才能触发该行为,而https://example.com/index.php依然可直接访问——index 指令不会屏蔽或重写这个 .php 后缀。
用 rewrite + try_files 隐藏 index.php
这是最常用、也最稳妥的方式,适用于 ThinkPHP、Laravel、CodeIgniter 等框架。核心是让所有非真实静态资源的请求,都交由 index.php 统一调度。
典型配置:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
说明:
-
$uri:先检查是否存在同名静态文件(如/about对应about文件); -
$uri/:再检查是否为真实目录(如/admin/); - 都不匹配时,内部转发到
/index.php?...,URL 地址栏保持干净(无index.php); - 注意:PHP 处理器必须能正确解析
PATH_INFO或QUERY_STRING,否则路由会失效。
用 rewrite 隐藏 .php 后缀(慎用)
若希望 /user 访问实际执行 /user.php,可用以下方式:
location / {
try_files $uri $uri/ $uri.php?$args;
}
或配合 rewrite(更显式但易循环):
location ~ ^[^.]*$ {
rewrite ^(.*)$ $1.php last;
}
风险提示:
- 可能引发无限重写循环(比如
/test→/test.php→ 再匹配又加 .php); - 需确保所有目标
.php文件真实存在,否则返回 404; - 不推荐用于框架项目,因会绕过统一入口,破坏路由机制。
关键注意事项
无论哪种方式,都要确认:
- PHP-FPM 正常运行,且
fastcgi_param SCRIPT_FILENAME设置准确; - 静态资源(CSS/JS/图片)路径不被误匹配,建议单独配
location ~ \.(js|css|png|jpg)$提前终止; - 修改配置后执行
nginx -t校验语法,再nginx -s reload生效; - 浏览器缓存可能干扰测试,建议用无痕模式或清空缓存验证。


















