最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 如何在 Nginx 中配置伪静态规则将动态 PHP 链接伪装成静态 HTML
时间:2026-08-14 20:26:50 编辑:袖梨 来源:一聚教程网
Nginx可通过server块中rewrite+if判断实现伪静态,如将/index.php?id=123转为/article/123.html且URL不变;需用if(!-e $request_filename)避免覆盖静态资源,rewrite规则用last标志内部重定向,并支持PATH_INFO统一入口简化配置。
直接在 Nginx 的 server 块中写 rewrite 规则,配合文件存在性判断,就能把 index.php?id=123 这类动态链接转成 /article/123.html 这样的静态外观,浏览器地址栏不变,后端仍走 PHP 处理。
核心配置:用 rewrite + if 判断实现基础伪静态
最常用也最稳妥的方式是先检查请求路径是否对应真实文件或目录,不存在时再触发重写:
- 在站点的
server块内添加 location 区块,通常放在 root 和 index 指令之后 - 使用
if (!-e $request_filename)确保只对非真实资源的请求做重写,避免覆盖 js/css/img 等静态文件 - rewrite 规则中用正则捕获参数,例如
^/article/(d+).html$匹配/article/123.html,然后映射到/index.php?id=$1 - flag 推荐用
last,表示内部重定向,不改变浏览器 URL,且会重新匹配 location
典型规则示例:文章页和分页伪静态
假设你的 PHP 入口是 index.php,想让文章页和列表页都呈现 HTML 后缀:
- 文章详情:
rewrite ^/article/(d+).html$ /index.php?action=article&id=$1 last; - 栏目列表:
rewrite ^/category/(d+)/page-(d+).html$ /index.php?action=category&cid=$1&page=$2 last; - 首页分页:
rewrite ^/page-(d+).html$ /index.php?action=home&page=$1 last;
所有规则都放在同一个 location / { ... } 块里,按顺序匹配,靠前的优先生效。
更简洁写法:统一入口 + PATH_INFO 解析
如果你的 PHP 框架或程序支持 PATH_INFO(如 ThinkPHP、CodeIgniter),可把所有请求集中到一个入口,减少规则数量:
- 配置:
rewrite ^/(.*).html$ /index.php/$1 last; - 这样访问
/user/profile.html实际执行index.php/user/profile - PHP 中通过
$_SERVER['PATH_INFO']或框架路由自动解析路径,无需每个链接单独写 rule - 注意:需确保 PHP-FPM 配置启用
fastcgi_split_path_info并正确传递 PATH_INFO
调试与验证要点
规则写完不能直接上线,必须验证是否按预期工作:
- 修改配置后执行
nginx -t检查语法,再nginx -s reload生效 - 访问一个伪造的伪静态路径(如
/article/999.html),看是否返回 PHP 页面而非 404 - 打开 Nginx error log(
error_log /path/to/error.log notice;),开启notice级别可看到 rewrite 执行日志 - 确认 PHP 脚本能正常接收参数——比如
$_GET['id']是否拿到值,而不是空或报错
相关文章
- 《和平精英》iPadmini6帧率解析-能否开启90帧详解 08-30
- 异环人权卡有哪些技能 四位核心角色技能全解析 08-30
- 王者荣耀世界是什么类型游戏 王者荣耀世界玩法介绍 08-30
- 晋江小说阅读可以听书吗 晋江文学城开启听书模式教程 08-30
- 逆水寒琴师技能顺序攻略(琴师技能解析及推荐顺序) 08-30
- 《Tomodachi Life: Living the Dream》评测 08-30