Nginx Rewrite 指令实战:URL 重写技巧与案例
Nginx 的 rewrite 指令是用于 URL 重写和重定向的强大武器,通过灵活的正则表达式和各种标志位,可以轻松实现 URL 的美化、SEO 优化以及网站结构的调整。以下是一些实用的技巧和实战案例,帮你掌握 rewrite 的精髓。
基础语法回顾
rewrite 的基本格式如下:
rewrite [flag] regex_pattern substitution_flag;
regex_pattern是正则表达式,用来匹配 URL 的某个部分。substitution是替换规则,可以是固定字符串或带有变量的字符串。flag控制重写的行为,比如last,break,redirect,permanent等。
实战技巧
- 简单的 URL 重写
将所有以
.html结尾的 URL 重写去除扩展名:rewrite ^/(.*).html $1 last;上面的例子中,任何形如
example.com/page.html的 URL 都会被重写为example.com/page。 - SEO 优化
将 URL
example.com/?id=123重写为example.com/post/123:rewrite ^/post/(\d+)$ /?id=$1 last;同时,在
location中处理查询参数形式的请求:location / { if ($query_string ~* id=(\d+)) { rewrite ^/(.*)$ /post/$1 last; } } - 域名重定向
如果希望所有请求从
http://oldsite.com转向https://newsite.com:server { listen 80; server_name oldsite.com; return 301 https://newsite.com$request_uri; } server { listen 443 ssl; server_name newsite.com; # SSL 设置... } - 子目录的内部重写
把对
/blog子目录的所有请求重写到/wordpress目录:location /blog { rewrite ^/blog(.*) /wordpress$1; } - 条件性重写
只有当满足特定条件时进行重写,例如根据主机名:
if ($host ~* ^(www\.)?domain\.com) { rewrite ^/oldpage /newpage redirect; } - 错误页跳转
自定义错误页重定向:
error_page 404 /custom_error.html;并将所有返回 404 错误码的请求重定向到自定义页面:
error_page 404 = @fallback; location @fallback { root /var/www/html/custom_errors/; try_files $uri =404; } - 禁止访问特定目录
禁止访问
/admin目录:location ~* ^/admin/.*$ { return 403; }
总结
通过上述实例,我们可以看到 rewrite 指令在 Nginx 中的应用范围之广,从简单的 URL 清洗到复杂的条件判断和内部重写。掌握 rewrite 不仅能够提升网站的美观和 SEO 友好性,还能增加网站的安全性和功能性。当然,编写有效的 rewrite 规则需要一定的正则表达式基础和逻辑思考,希望这些技巧能帮你在实际项目中更加熟练地应用这一强大功能。