Lowercase Redirection
Overview
The lowercase redirection middleware automatically redirects URLs containing uppercase letters to their lowercase equivalent. This ensures URL consistency and helps with SEO by preventing duplicate content issues.
Use Cases
- SEO Optimization: Prevent duplicate content penalties from search engines
Usage
Import the middleware from @traveloka/core/server:
import { lowercaseRedirectionMiddleware } from '@traveloka/core/server';
app.use(
lowercaseRedirectionMiddleware([
{
pattern: /^\/flight/, // Match flight routes
statusCode: 301, // Permanent redirect (default)
},
{
pattern: /^\/hotel/,
statusCode: 302, // Temporary redirect
},
])
);
Configuration
Parameters
The middleware accepts an array of configuration objects:
| Property | Type | Required | Default | Description |
|---|---|---|---|---|
pattern | RegExp | Yes | - | Regex pattern to match request paths. Automatically enforced as case-insensitive. |
statusCode | 301 | 302 | 307 | 308 | No | 301 | HTTP redirect status code. |
Status Codes
- 301: Permanent redirect (default) - Browser caches the redirect
- 302: Temporary redirect - Browser doesn't cache
- 307: Temporary redirect (preserves request method)
- 308: Permanent redirect (preserves request method)
Examples
Basic Example
Redirect all flight paths to lowercase:
app.use(lowercaseRedirectionMiddleware([{ pattern: /^\/flight/ }]));
Before: /Flight/Search?from=CGK
After: /flight/search?from=CGK
Multiple Routes
Handle different sections with different redirect types:
app.use(
lowercaseRedirectionMiddleware([
{ pattern: /^\/flight/, statusCode: 301 },
{ pattern: /^\/hotel/, statusCode: 301 },
{ pattern: /^\/car/, statusCode: 302 },
])
);
Preserve Query Parameters
Query parameters are automatically preserved:
app.use(
lowercaseRedirectionMiddleware([{ pattern: /^\/(en-id|id-id)\/flight/ }])
);
Before: /en-id/Flight/Search?from=CGK&to=DPS
After: /en-id/flight/search?from=CGK&to=DPS
Behavior
- Pattern Matching: The middleware checks each request path against configured patterns
- Case Detection: If a match is found and the path contains uppercase letters, a redirect is triggered
- Query Preservation: All query parameters are preserved during redirection
- Lowercase Enforcement: Patterns are automatically made case-insensitive for matching