理解Nginx重写规则:rewrite基础与实战示例

0 下载量 60 浏览量 更新于2024-08-31 收藏 96KB PDF 举报
"nginx重写rewrite基础及实例分享" 在Web服务器领域,Nginx以其高性能、轻量级的特性而广受欢迎,其中一项强大的功能就是URL重写(rewrite)。本篇将详细介绍Nginx的rewrite模块,以及如何利用它进行URL处理。 1. **Nginx重写规则基础** - **正则表达式匹配** - `~` 表示区分大小写的正则匹配 - `~*` 表示不区分大小写的正则匹配 - `!~` 和 `!~*` 分别表示区分大小写不匹配和不区分大小写不匹配 - **文件及目录匹配** - `-f` 检查文件是否存在 - `!-f` 检查文件不存在 - `-d` 检查目录是否存在 - `!-d` 检查目录不存在 - `-e` 检查文件或目录是否存在 - `!-e` 检查文件或目录不存在 - `-x` 检查文件是否可执行 - `!-x` 检查文件不可执行 2. **Rewrite Flag标记** - `last`:停止当前规则的匹配,相当于Apache中的[L]标志,通常用于跳转或结束重写流程 - `break`:终止当前规则匹配,但允许继续处理后续规则 - `redirect`:返回302临时重定向,浏览器地址栏显示跳转后的URL - `permanent`:返回301永久重定向,告诉浏览器记住新的URL 3. **Location块的使用** - `/`:匹配任何以`/`开头的URL - `=/`:仅匹配URL为`/`的情况 - `~*`:不区分大小写的正则匹配 4. **实例解析** - **多目录转成参数** - 将`abc.domain.com/sort/2`重写为`abc.domain.com/index.php?act=sort&name=abc&id=2` ```nginx if ($host ~* (.*)\.domain\.com) { set $sub_name $1; rewrite ^/sort/(\d+)/?$ /index.php?act=sort&cid=$sub_name&id=$1 last; } ``` - **目录对换** - 将`/123456/xxxx`重写为`/xxxx?id=123456` ```nginx rewrite ^/(\d+)/(.+)$ /$2?id=$1 last; ``` - **浏览器优化的自动重写** - 当检测到IE浏览器时,重定向到`/nginx-ie/`目录 ```nginx if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /nginx-ie/$1 break; } ``` - **目录自动添加“/”** - 如果URL没有末尾的“/”,自动添加,如`/dir` -> `/dir/` ```nginx rewrite ^/(.*[^/])$ /$1/ permanent; ``` 通过以上介绍,我们可以看到Nginx的rewrite规则提供了极大的灵活性,能够根据不同的需求实现URL的转换和重定向,从而优化网站结构,提高用户体验,并对SEO有所帮助。在实际配置中,应根据具体情况进行调整,确保规则的准确性和效率。