nginx-conf实战:10个必学的重写与重定向技巧
nginx-conf实战:10个必学的重写与重定向技巧
nginx-conf是一个收集实用Nginx配置片段的项目,提供了丰富的Nginx配置示例,帮助用户快速实现各种Web服务器功能。本文将介绍10个必学的Nginx重写与重定向技巧,通过nginx-conf项目中的实用配置片段,让你轻松掌握Nginx URL重写和重定向的核心技能。
1. 实现HTTP到HTTPS的永久重定向
将所有HTTP请求永久重定向到HTTPS是网站安全的基础配置。通过return指令可以高效实现这一功能:
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
这段配置会将所有HTTP请求返回301永久重定向状态码,并指向对应的HTTPS地址,$host变量表示当前请求的域名,$request_uri变量包含完整的请求路径和参数。
2. 移除URL中的www前缀
很多网站同时支持带www和不带www的域名访问,为了统一网站地址并避免重复内容,可以将带www的域名重定向到不带www的域名:
server {
listen 443 ssl;
server_name www.example.com;
return 301 https://example.com$request_uri;
}
通过将server_name设置为www.example.com,然后使用return 301指令将请求重定向到不带www的域名,实现URL的统一。
3. 使用rewrite指令实现URL重写
rewrite指令是Nginx实现URL重写的强大工具,它可以根据正则表达式匹配URL,并将其重写到新的URL。例如,将/product.php?id=123这种形式的URL重写为/product/123:
rewrite ^/product/(\d+)$ /product.php?id=$1 last;
这里^/product/(\d+)$是一个正则表达式,匹配以/product/开头后跟数字的URL,(\d+)捕获数字部分作为参数,然后重写到/product.php?id=$1,其中$1引用了前面捕获的数字。last标志表示当前重写完成后不再处理其他rewrite指令。
4. 设置临时重定向
有时候需要临时将某个URL重定向到其他地址,这时应该使用302临时重定向状态码,而不是301永久重定向:
location /old-page {
return 302 /new-page;
}
302重定向告诉搜索引擎该重定向是临时的,不会将旧页面的排名转移到新页面,适用于临时维护或活动页面等场景。
5. 实现URL路径的大小写不敏感匹配
默认情况下,Nginx的location匹配是大小写敏感的,可以通过rewrite指令将URL统一转换为小写,实现大小写不敏感的访问:
rewrite ^/(.*)$ /$1 lowercase;
这条指令会将URL路径部分转换为小写,确保用户无论输入大写还是小写字母都能访问到正确的页面。
6. 重定向到带尾部斜杠的URL
有些网站希望URL总是以斜杠结尾,特别是目录类型的URL,可以通过以下配置实现自动添加尾部斜杠:
location /blog {
rewrite ^([^.]*[^/])$ $1/ permanent;
}
这个正则表达式匹配不以点(表示文件)和斜杠结尾的URL,然后在末尾添加斜杠并返回301永久重定向。
7. 根据用户代理进行重定向
可以根据访问者的用户代理(浏览器或爬虫)进行不同的重定向,例如将移动设备用户重定向到移动版网站:
if ($http_user_agent ~* (mobile|android|iphone|ipad)) {
rewrite ^/$ /mobile/ permanent;
}
这里使用if指令检查$http_user_agent变量是否包含移动设备相关的关键词,如果是,则将根目录请求重定向到/mobile/路径。
8. 实现URL参数的重写与重定向
有时候需要修改URL中的参数,可以通过rewrite指令配合正则表达式捕获和修改参数:
rewrite ^/search\?q=(.*)$ /search/$1 permanent;
这条指令将/search?q=keyword形式的URL重写为/search/keyword形式,使URL更加美观和SEO友好。
9. 使用break标志终止重写处理
在某些情况下,希望执行完当前rewrite指令后不再继续处理其他rewrite或location,可以使用break标志:
location /admin {
rewrite ^/admin/(.*)$ /backend/$1 break;
proxy_pass http://backend_server;
}
这里break标志表示重写URL后直接使用当前location的配置,不再进行其他匹配,然后将请求代理到后端服务器。
10. 结合location块实现复杂重定向逻辑
通过将rewrite指令与location块结合,可以实现更复杂的重定向逻辑。例如,将不同类型的请求重定向到不同的处理程序:
location /images/ {
rewrite ^/images/(.*)\.jpg$ /media/$1.jpg last;
}
location /media/ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
这段配置首先将/images/目录下的jpg图片重写到/media/目录,然后由/media/对应的location块处理,设置缓存策略等。
总结
Nginx的重写与重定向功能是构建灵活和高效Web服务器的关键。通过本文介绍的10个技巧,你可以实现URL美化、域名统一、协议转换等常见需求。nginx-conf项目提供了更多实用的Nginx配置片段,你可以通过clone仓库获取完整的配置示例:
git clone https://gitcode.com/gh_mirrors/ngin/nginx-conf
掌握这些重写与重定向技巧,将帮助你更好地管理和优化Web服务器配置,提升网站的用户体验和SEO表现。
更多推荐




所有评论(0)