-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmiddleware.ts
More file actions
121 lines (102 loc) · 3.66 KB
/
middleware.ts
File metadata and controls
121 lines (102 loc) · 3.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import { NextRequest, NextResponse } from "next/server";
// COMMENTED OUT: Language/locale pages and auto-redirection disabled
// Supported countries for localized routes
// const SUPPORTED_COUNTRIES = ["IN", "US", "CA", "AU", "AE", "GB"] as const;
// type SupportedCountry = (typeof SUPPORTED_COUNTRIES)[number];
// Country code to route mapping
// const COUNTRY_ROUTES: Record<SupportedCountry, string> = {
// IN: "en-in",
// US: "en-us",
// CA: "en-ca",
// AU: "en-au",
// AE: "en-ae",
// GB: "en-gb",
// };
// Routes that should be excluded from country-based routing
// const EXCLUDED_PATHS = [
// "/api",
// "/_next",
// "/static",
// "/favicon.ico",
// "/robots.txt",
// "/sitemap.xml",
// "/manifest.webmanifest",
// "/~partytown",
// ];
export function middleware(request: NextRequest) {
// COMMENTED OUT: Auto-redirect to language/locale pages disabled
// const { pathname } = request.nextUrl;
// Skip excluded paths
// if (EXCLUDED_PATHS.some((path) => pathname.startsWith(path))) {
// return NextResponse.next();
// }
// Skip if already on a country-specific route
// const countryPrefixes = Object.values(COUNTRY_ROUTES);
// if (countryPrefixes.some((prefix) => pathname.startsWith(`/${prefix}`))) {
// return NextResponse.next();
// }
// Get country from various sources
// let countryCode: string | null = null;
// 1. Check cookie preference (highest priority)
// const cookieCountry = request.cookies.get("user-country")?.value;
// if (
// cookieCountry &&
// SUPPORTED_COUNTRIES.includes(cookieCountry as SupportedCountry)
// ) {
// countryCode = cookieCountry;
// }
// 2. Check Vercel geo header (for Vercel deployments)
// if (!countryCode) {
// countryCode = request.headers.get("x-vercel-ip-country") || null;
// }
// 3. Check CloudFlare geo header (for CloudFlare deployments)
// if (!countryCode) {
// countryCode = request.headers.get("cf-ipcountry") || null;
// }
// 4. Check custom geo header (for other proxies/CDNs)
// if (!countryCode) {
// countryCode = request.headers.get("x-country-code") || null;
// }
// If country is supported, redirect to country-specific route
// if (
// countryCode &&
// SUPPORTED_COUNTRIES.includes(countryCode as SupportedCountry)
// ) {
// const countryRoute = COUNTRY_ROUTES[countryCode as SupportedCountry];
// const newUrl = request.nextUrl.clone();
// // Handle trailing slashes
// const cleanPathname =
// pathname.endsWith("/") && pathname !== "/"
// ? pathname.slice(0, -1)
// : pathname;
// // Special case for home page
// if (cleanPathname === "" || cleanPathname === "/") {
// newUrl.pathname = `/${countryRoute}/`;
// } else {
// newUrl.pathname = `/${countryRoute}${cleanPathname}`;
// }
// // Redirect to country-specific URL (URL will show the country prefix)
// const response = NextResponse.redirect(newUrl, 307); // 307 Temporary Redirect
// // Set cookie to remember preference (this also makes it available to client-side)
// response.cookies.set("user-country", countryCode, {
// maxAge: 60 * 60 * 24 * 30, // 30 days
// path: "/",
// sameSite: "lax",
// });
// return response;
// }
// For unsupported countries, serve the default content
return NextResponse.next();
}
export const config = {
matcher: [
/*
* Match all request paths except for the ones starting with:
* - api (API routes)
* - _next/static (static files)
* - _next/image (image optimization files)
* - favicon.ico (favicon file)
*/
"/((?!api|_next/static|_next/image|favicon.ico|~partytown).*)",
],
};