Nginx 的 rewrite 功能是 URL 重写和重定向的强大工具,可以用于修改请求 URI、实现 URL 美化、处理旧链接重定向等场景。
Nginx 的 rewrite 指令基本语法如下:
rewrite regex replacement [flag];
regex
: 正则表达式,用于匹配请求的 URIreplacement
: 替换字符串,匹配成功后将被替换的字符串flag
: 可选标志位,控制重写行为last
: 停止处理当前 rewrite 规则,并用修改后的 URI 重新搜索 locationbreak
: 停止处理当前 rewrite 规则,不再搜索其他规则redirect
: 返回 302 临时重定向permanent
: 返回 301 永久重定向rewrite ^/oldpath$ /newpath;
rewrite ^/users/(.*)$ /show?user=$1? last;
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
server {
listen 80;
server_name olddomain.com;
rewrite ^(.*)$ http://newdomain.com$1 permanent;
}
if ($scheme != "https") {
rewrite ^ https://$host$uri permanent;
}
rewrite ^/(.*)/index\.php$ /$1 permanent;
location /images/ {
rewrite ^/images/(.*)$ /pics/$1 break;
}
if ($http_user_agent ~* "MSIE") {
rewrite ^(.*)$ /ie/$1 break;
}
$1
, $2
等在替换字符串中引用permanent
或 redirect
时,替换字符串必须是完整 URLreturn 200 "message";
测试 rewrite 规则是否匹配rewrite_log on;
开启 rewrite 日志(需要 debug 日志级别)通过合理使用 rewrite 功能,可以有效地管理网站 URL 结构,实现新旧 URL 的平滑过渡,提升用户体验和 SEO 效果。