# ============================================================
# Nginx 重定向配置示例
# ============================================================
#
# 功能说明:
# - HTTP to HTTPS 重定向
# - 域名重定向
# - 规范化 URL
#
# Lolly 对应配置:
# server:
#   rewrite:
#     - pattern: "^http://(.*)$"
#       replacement: "https://$1"
#       flag: "permanent"
# ============================================================

http {
    # HTTP to HTTPS 重定向
    server {
        listen 80;
        server_name secure.example.com;

        # 方式一：rewrite
        rewrite ^(.*)$ https://$host$1 permanent;

        # 方式二：return（推荐，更高效）
        return 301 https://$host$request_uri;
    }

    # 域名重定向
    server {
        listen 80;
        server_name old-domain.com;

        # 重定向到新域名
        return 301 https://new-domain.com$request_uri;
    }

    # 规范化 URL
    server {
        listen 443 ssl;
        server_name example.com www.example.com;

        ssl_certificate /etc/nginx/ssl/server.crt;
        ssl_certificate_key /etc/nginx/ssl/server.key;

        # 移除 www（规范化到无 www）
        if ($host = www.example.com) {
            return 301 https://example.com$request_uri;
        }

        # 或添加 www（规范化到 www）
        # if ($host = example.com) {
        #     return 301 https://www.example.com$request_uri;
        # }

        location / {
            root /var/www/html;
        }
    }

    # 移除尾部斜杠
    server {
        listen 80;
        server_name noslash.example.com;

        # 移除 URL 尾部斜杠（除目录外）
        rewrite ^/(.*)/$ /$1 permanent;

        location / {
            root /var/www/html;
        }
    }

    # 强制尾部斜杠（SEO 规范化）
    server {
        listen 80;
        server_name slash.example.com;

        # 非文件且无斜杠时添加
        if (!-f $request_filename) {
            rewrite ^/(.*[^/])$ /$1/ permanent;
        }

        location / {
            root /var/www/html;
        }
    }

    # 基于路径的条件重定向
    server {
        listen 80;
        server_name conditional.example.com;

        # 维护模式重定向
        location / {
            if ($maintenance_mode) {
                return 302 /maintenance.html;
            }
            proxy_pass http://backend:8080;
        }

        location = /maintenance.html {
            root /var/www/maintenance;
        }
    }
}

# 重定向说明:
#
# 1. 301 vs 302:
#    - 301 永久重定向:
#      搜索引擎更新索引
#      浏览器缓存重定向
#      用于永久性变更（域名迁移）
#    - 302 临时重定向:
#      搜索引擎保持原 URL
#      浏览器每次都请求
#      用于临时变更（维护、测试）
#
# 2. HTTP to HTTPS:
#    推荐使用 return 而非 rewrite:
#    - return 更高效（不解析正则）
#    - 直接返回响应
#    - 保持原始请求 URI
#
# 3. 规范化:
#    URL 规范化防止:
#    - 重复内容问题（SEO）
#    - 缓存失效
#    - 站点统计混乱
#
#    规范化类型:
#    - www vs non-www
#    - 尾部斜杠
#    - HTTP vs HTTPS
#    - 路径大小写
#
# 4. Lolly 支持:
#    - rewrite 配置列表
#    - 支持所有 flag 参数
#    - 正则表达式匹配
#    - 捕获组引用