Nginx的rewrite模块提供了强大的URL重写和跳转功能,可以通过多种方式实现URL跳转。以下是几种常见的实现方式:
server {
listen 80;
server_name example.com;
# 永久重定向(301)
rewrite ^/old-url$ /new-url permanent;
# 临时重定向(302)
rewrite ^/temp-url$ /new-url redirect;
}
location /products {
# 将/products/123跳转到/item?id=123
rewrite ^/products/(\d+)$ /item?id=$1 last;
}
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 80;
server_name example.com;
return 301 http://www.example.com$request_uri;
}
rewrite ^([^.]*[^/])$ $1/ permanent;
server {
listen 80;
server_name old.com;
return 301 http://new.com$request_uri;
}
last
- 停止处理当前rewrite指令集,并开始搜索匹配新URI的locationbreak
- 停止处理当前rewrite指令集redirect
- 返回302临时重定向permanent
- 返回301永久重定向# 根据浏览器类型跳转
if ($http_user_agent ~* "MSIE") {
rewrite ^(.*)$ /ie-version/$1 break;
}
# 根据查询参数跳转
if ($args ~* "id=([0-9]+)") {
rewrite ^/item$ /product/%1? permanent;
}
# 将多个旧URL模式重写到新URL
rewrite ^/shop/(.*)/category/(.*)$ /$1/$2 permanent;
# 带参数的复杂重写
rewrite ^/download/(.*)/version/(.*)/file/(.*)$ /dl.php?product=$1&ver=$2&file=$3? last;
return
指令进行简单跳转,效率更高rewrite_log on;
可以开启重写日志,方便调试通过合理使用Nginx的rewrite功能,可以实现各种复杂的URL跳转需求。