URL重写(URL Rewriting)是网站优化中至关重要的技术,它能带来以下好处: - 提升SEO效果:简洁、语义化的URL更受搜索引擎青睐 - 改善用户体验:易读易记的URL结构 - 隐藏技术细节:保护后端实现细节 - 统一访问入口:规范化URL格式
location /old-path/ {
rewrite ^/old-path/(.*)$ /new-path/$1 permanent;
}
permanent:返回301永久重定向(SEO友好)redirect:返回302临时重定向last:停止处理当前重写规则,继续匹配其他locationbreak:停止所有重写处理location / {
try_files $uri $uri/ $uri.php$is_args$args;
}
# 或者使用重写规则
rewrite ^/(.*)/$ /$1 permanent;
rewrite ^/([^.?]+)$ /$1.php last;
server {
listen 80;
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
rewrite ^([^.]*[^/])$ $1/ permanent;
# 确保URL唯一性(带/和不带/视为不同URL)
rewrite ^/(.*)/$ /$1 permanent;
# 去除重复斜杠
rewrite ^/(.*)//+(.*)$ /$1/$2 permanent;
# 去除无用参数(如session ID)
if ($args ~* "^(.*)&?sid=[^&]+(.*)$") {
set $args $1$2;
rewrite ^ $uri?$args?;
}
# 参数排序统一
set $args $args&%QUERY_STRING;
if ($args ~* "^(.*)&?([^=]+)=([^&]+)&?(.*)$") {
set $args $1&$4;
set $args $args&$2=$3;
rewrite ^ $uri?$args?;
}
# 将语言代码作为URL前缀
rewrite ^/(en|fr|de|es)/(.*)$ /$2?lang=$1 last;
# 或者使用子目录
location ~ ^/(en|fr|de|es)/ {
rewrite ^/(en|fr|de|es)/(.*)$ /$2?lang=$1 last;
}
# 根据User-Agent重定向
if ($http_user_agent ~* "(mobile|android|iphone)") {
rewrite ^(.*)$ /mobile$1 last;
}
# 根据IP地址重定向
geo $is_internal {
default 0;
192.168.0.0/24 1;
10.0.0.0/8 1;
}
server {
if ($is_internal) {
rewrite ^/intranet/(.*)$ /$1 last;
}
}
# 将/product.php?id=123 重写为 /product/123
rewrite ^/product/([0-9]+)/?$ /product.php?id=$1 last;
# 将/category/books/page/2 重写为 /category.php?name=books&page=2
rewrite ^/category/([^/]+)/page/([0-9]+)/?$ /category.php?name=$1&page=$2 last;
location /api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
测试重写规则:
nginx -t # 测试配置语法
nginx -T # 显示完整配置(包括包含文件)
日志调试:
rewrite_log on;
error_log /var/log/nginx/rewrite.log notice;
使用curl测试:
curl -I http://example.com/old-url # 查看响应头
curl -v http://example.com/old-url # 详细跟踪
SEO友好原则:
性能考虑:
break而非last减少匹配次数安全考虑:
通过合理配置Nginx URL重写规则,您可以显著提升网站的可读性、SEO表现和用户体验,同时保持后端架构的灵活性。