6-nginx rewrite
Nginx Rewrite
rewrite 指令的位置
rewrite 指令确实可以放置在 server、location 或 if 块中。rewrite 匹配的范围
rewrite 指令只对域名后的路径部分(即 URL 中的路径部分)起作用,不包括查询参数(query string)和片段标识符(fragment identifier)。具体来说:
路径部分:例如 http://192.168.27.11:9090/targets 中的 /targets。
查询参数:例如 http://192.168.27.11:9090/targets?search=pool-prometheus 中的 ?search=pool-prometheus。
片段标识符:例如 http://192.168.27.11:9090/targets#pool-prometheus 中的 #pool-prometheus。
- 示例
1
2
3
4
5
6
7
8
9
10
11server {
listen 80;
server_name example.com;
location /old {
rewrite ^/old/(.*)$ /new/$1 permanent;
}
}
# 访问 http://example.com/old/path?param=value#fragment
# 会被重定向到 http://example.com/new/path?param=value#fragment
基本语法
1 | rewrite regex replacement [flag]; |
- regex: 正则表达式,用于匹配 URL。
- replacement: 重写后的 URL,可以包含 Nginx 内置变量,如
$host
表示请求的主机名。 - flag: 标记,控制重写行为。
常见标记
- last: 终止当前
location
块中的处理,并将重写后的 URI 作为新的 URI 进行处理。通常用于内部重定向。 - break: 将重写后的 URI 在当前
location
块中继续处理,不会将新的 URI 转移到其他location
块。 - redirect: 返回 302 临时重定向,浏览器地址栏会显示跳转后的 URL。下次访问同一个 URL 时,浏览器会重新发起请求,而不是直接跳转到上次重定向的 URL。
- permanent: 返回 301 永久重定向,浏览器地址栏会显示跳转后的 URL。
示例
1. 临时重定向
1 | server { |
2. 永久重定向
1 | server { |
3. 内部重定向
1 | server { |
4. 条件重定向
1 | server { |
if
语句
if
语句用于在 server
或 location
块中进行条件判断。常见的条件包括:
- 变量名: 变量的值为
0
或空字符串时,条件为false
。 - 变量与字符串相等: 使用
=
和!=
,判断变量和字符串是否相等。 - 变量与字符串匹配: 使用
~
(区分大小写)和~*
(不区分大小写),判断变量值是否包含正则匹配内容。 - 文件存在: 使用
-f
和!-f
,判断文件是否存在。 - 目录存在: 使用
-d
和!-d
,判断目录是否存在。
示例
1 | server { |
break
语句
break
语句用于中断当前作用域中的其他 Nginx 配置,使得 break
之前的指令生效,之后的指令不生效。可以在 server
、location
或 if
中使用。
示例
1 | server { |
return
语句
return
语句用于直接向客户端返回响应状态码。可以在 server
、location
或 if
中使用。
示例
1 | server { |
set
语句
set
语句用于设置一个新的变量。
示例
1 | server { |
rewrite_log
语句
rewrite_log
语句用于开启或关闭 rewrite
日志输出功能。
示例
1 | server { |
总结
通过上述配置和示例,你可以更好地理解和使用 Nginx 的 rewrite
模块。rewrite
模块在处理 URL 重写和重定向方面非常强大,可以帮助你优化网站的访问体验和 SEO 效果。希望这些内容对你有所帮助!