server {
listen 80;
server_name www.example.com example.com;
location = /blog {
rewrite ^/blog$ /blog/index.php last;
rewrite ^/blog/([0-9]+)$ /blog/index.php?id=$1 last;
rewrite ^/blog/([a-z]+)/([0-9]+)$ /blog/index.php?category=$1&id=$2 last;
}
}
基本配置说明:
rewrite ^/blog$ /blog/index.php last:重写 /blog 为 /blog/index.phprewrite ^/blog/([0-9]+)$ /blog/index.php?id=$1 last:重写 /blog/123 为 /blog/index.php?id=123rewrite ^/blog/([a-z]+)/([0-9]+)$ /blog/index.php?category=$1&id=$2 last:重写 /blog/news/123 为 /blog/index.php?category=news&id=123基本配置原理:
rewrite 指令用于重写 URI,可以使用正则表达式匹配 URI,并使用捕获组提取信息。
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
重写规则说明:
^(/download/.*)/media/(.*)\..*$:匹配 /download/.../media/.... 格式的 URI$1/mp3/$2.mp3:重写为 /download/.../mp3/....mp3 格式的 URI重写规则原理:
rewrite 指令用于重写 URI,可以使用正则表达式匹配 URI,并使用捕获组提取信息。
| 标志 | 说明 | 示例 |
|---|---|---|
last | 停止处理当前指令集,重新开始搜索匹配 | rewrite ^/blog$ /blog/index.php last |
break | 停止处理当前指令集 | rewrite ^/blog$ /blog/index.php break |
redirect | 返回 302 重定向 | rewrite ^/blog$ /blog/ redirect |
permanent | 返回 301 重定向 | rewrite ^/blog$ /blog/ permanent |
重写标志原理:
last:停止处理当前指令集,重新开始搜索匹配break:停止处理当前指令集redirect:返回 302 重定向permanent:返回 301 重定向server {
listen 80;
server_name www.example.com example.com;
return 301 https://$host$request_uri;
}
示例说明:
return 301 https://$host$request_uri:返回 301 重定向,重定向到 HTTPS示例原理:
return 指令用于返回响应,可以指定状态码和响应体。
map $http_user_agent $is_mobile {
default 0;
~*Mobile 1;
}
server {
listen 80;
server_name www.example.com example.com;
if ($is_mobile) {
rewrite ^ https://m.example.com$request_uri? redirect;
}
}
示例说明:
map:定义变量映射if:条件判断rewrite:重写 URI示例原理:
map 指令用于定义变量映射,if 指令用于条件判断,rewrite 指令用于重写 URI。