Bab 13: Rewrite dan Redirect di Nginx – Panduan Lengkap

Bab 13: Rewrite dan Redirect di Nginx – Panduan Lengkap

Rewrite dan redirect adalah fitur penting Nginx untuk memodifikasi URL, mengarahkan traffic, dan menjaga SEO.

Fitur ini digunakan untuk mengubah request URL, melakukan redirect permanen atau sementara, dan menangani URL dinamis menggunakan regex.


1. Rewrite URL dengan rewrite

Directive rewrite digunakan untuk mengubah URL request sebelum diproses lebih lanjut.

Contoh dasar:

location /old/ {
    rewrite ^/old/(.*)$ /new/$1 permanent;
}
  • ^/old/(.*)$ → regex untuk menangkap path setelah /old/
  • /new/$1 → path baru, $1 adalah hasil capture
  • permanent → menghasilkan HTTP 301 (redirect permanen)

Tips:

  • Gunakan rewrite untuk struktur URL baru atau migrasi halaman
  • Bisa digunakan di server block atau location block

2. Redirect 301 / 302

Nginx mendukung redirect permanen (301) dan sementara (302) menggunakan directive return.

Redirect permanen (301):

server {
    listen 80;
    server_name www.example.com;

    return 301 https://example.com$request_uri;
}

Redirect sementara (302):

location /temp/ {
    return 302 /new-location/;
}
  • $request_uri → mempertahankan path dan query string
  • return lebih cepat daripada rewrite jika hanya melakukan redirect

3. Regex di location

location di Nginx bisa menggunakan regex untuk match URL kompleks.

Contoh:

location ~* \.(jpg|jpeg|png|gif)$ {
    expires 30d;
    add_header Cache-Control "public";
}
  • ~* → regex case-insensitive
  • Berguna untuk mengatur cache atau redirect file tertentu

Contoh redirect regex:

location ~ ^/old-section/(.*)\.html$ {
    return 301 /new-section/$1/;
}
  • Menangkap file .html di /old-section/ dan redirect ke /new-section/

4. Penggunaan return dan try_files

4.1 return

  • Lebih sederhana untuk redirect langsung atau mengembalikan kode status tertentu

Contoh:

location /maintenance.html {
    return 503;
}
  • Mengembalikan HTTP 503 saat maintenance

4.2 try_files

  • Memeriksa keberadaan file/folder dan fallback jika tidak ditemukan

Contoh:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
  • $uri → file yang diminta
  • $uri/ → folder jika file tidak ada
  • /index.php?$query_string → fallback ke PHP jika file/folder tidak ditemukan

Manfaat:

  • Digunakan untuk framework PHP/Node.js seperti Laravel, WordPress, atau React SPA
  • Mengurangi kebutuhan rewrite kompleks

5. Contoh Kombinasi Rewrite dan Redirect

server {
    listen 80;
    server_name example.com www.example.com;

    # Redirect www ke non-www
    if ($host = 'www.example.com') {
        return 301 https://example.com$request_uri;
    }

    root /var/www/html/example;
    index index.html index.php;

    # Rewrite old URLs
    location /old-section/ {
        rewrite ^/old-section/(.*)$ /new-section/$1 permanent;
    }

    # Handle SPA / fallback
    location / {
        try_files $uri $uri/ /index.html;
    }
}
  • Mengarahkan www ke non-www
  • Redirect halaman lama ke struktur baru
  • SPA fallback menggunakan try_files

6. Kesimpulan

Dengan rewrite dan redirect di Nginx, kamu dapat:

  1. Mengubah URL lama ke URL baru menggunakan rewrite
  2. Mengarahkan traffic permanen atau sementara dengan return 301/302
  3. Menggunakan regex di location untuk URL kompleks
  4. Mengatur fallback file dengan try_files
  5. Menjaga SEO dan pengalaman pengguna tetap baik saat migrasi atau struktur URL berubah