All Products
Search
Document Center

Edge Security Acceleration:Penulisan ulang URL

Last Updated:Jul 17, 2026

Konfigurasikan aturan penulisan ulang URL pada node tepi ESA untuk memodifikasi path permintaan dan string kueri selama permintaan asal. Lakukan migrasi path server asal tanpa mengubah URL yang diakses pengguna atau konfigurasi antarmuka depan.

Kasus penggunaan umum

  • Migrasi origin: Path file origin disesuaikan, tetapi Anda ingin menjaga path akses pengguna tetap tidak berubah.

  • Adaptasi versi API: Menulis ulang path versi API lama ke versi baru.

  • Standarisasi parameter: Menyatukan format parameter yang dikirimkan oleh berbagai klien.

  • Clean URL: Memetakan path backend kompleks ke path bersih yang dihadirkan kepada pengguna.

Cara kerja

Catatan

Jika penulisan ulang URL diaktifkan, permintaan prefetch harus menggunakan URL yang telah ditulis ulang.

Penulisan ulang URL hanya berlaku selama permintaan asal dan tidak memengaruhi pipeline pemrosesan internal ESA. Kunci cache dihasilkan dari URL asli, sehingga pencocokan cache tidak terpengaruh. URL yang ditulis ulang hanya digunakan untuk permintaan asal.

Alur eksekusi

  1. Periksa cache: Node tepi mencari cache berdasarkan URL asli. Jika terjadi cache miss, aturan penulisan ulang URL mengubah URL menjadi path target.

  2. Permintaan asal: URL yang telah ditulis ulang dikirim ke server origin. Responsnya di-cache menggunakan URL asli sebagai kunci cache.

  3. Kembalikan konten cache: Konten cache dikembalikan ke klien.

Urutan eksekusi

Penulisan ulang URL dijalankan setelah pemeriksaan cache dan pemilihan origin, tetapi sebelum modifikasi header permintaan asal. Path disesuaikan setelah target origin ditentukan tanpa memengaruhi pemrosesan header.

Konfigurasi aturan penulisan ulang URL

  1. Di Konsol ESA, pilih Websites, lalu pada kolom Website, klik situs target.

  2. Pada panel navigasi kiri, pilih Rules > Transform Rules.

  3. Pada bagian Rewrite URL, klik Create Rule dan masukkan Rule Name. Konfigurasikan Path dan Query String, lalu klik OK.

    Rewrite object

    Operation method

    Description

    Example

    Path

    Retain

    Jangan ubah path asli.

    -

    Static

    Ganti dengan path tetap (harus diawali dengan /).

    /new/path

    Dynamic

    Gunakan ekspresi untuk menghasilkan path secara dinamis.

    concat("/v2", http.request.uri.path)

    Query String

    Retain

    Jangan ubah string kueri asli.

    -

    Static

    Ganti dengan parameter tetap (tanpa ?).

    version=new&type=api

    Dynamic

    Gunakan ekspresi untuk menghasilkan string kueri secara dinamis.

    concat("version=new&", http.request.uri.query)

Contoh konfigurasi

Contoh 1: Migrasi path origin

  • Kasus penggunaan: Origin memindahkan gambar dari direktori /images/ ke direktori /static/img/.

  • Kondisi pencocokan: starts_with(http.request.uri.path, "/images/")

  • Konfigurasi penulisan ulang:

    Rewrite object: Path

    Operation method: Dynamic

    Ekspresi: regex_replace(http.request.uri.path, "^/images/", "/static/img/")

  • Efek penulisan ulang:

    Permintaan pengguna: https://example.com/images/logo.png

    Permintaan origin: https://origin.com/static/img/logo.png

Contoh 2: Adaptasi versi API

  • Kasus penggunaan: Menulis ulang permintaan dari /api/v1/ ke /api/v2/ selama permintaan origin dan menambahkan identifikasi versi.

  • Kondisi pencocokan: starts_with(http.request.uri.path, "/api/v1/")

  • Konfigurasi penulisan ulang:

    Rewrite object: Path, Query string

    Operation method: Dynamic

    Ekspresi penulisan ulang path: regex_replace(http.request.uri.path, "^/api/v1/", "/api/v2/")

    Ekspresi penulisan ulang string kueri: concat("api_version=v2&", http.request.uri.query)

  • Efek penulisan ulang:

    Permintaan pengguna: https://example.com/api/v1/users?limit=10

    Permintaan origin: https://origin.com/api/v2/users?api_version=v2&limit=10

Contoh 3: Standarisasi parameter

  • Kasus penggunaan: Klien berbeda menggunakan nama parameter berbeda (seperti userid dan uid). Satukan menjadi user_id yang standar.

  • Kondisi pencocokan: http.request.uri.query contains "userid="

  • Konfigurasi penulisan ulang:

    Rewrite object: Query string

    Operation method: Dynamic

    Ekspresi: regex_replace(http.request.uri.query, "userid=", "user_id=")

  • Efek penulisan ulang:

    Permintaan pengguna: https://example.com/profile?userid=123

    Permintaan origin: https://origin.com/profile?user_id=123

Contoh 4: Normalisasi path

Kasus 1

  • Kasus penggunaan: Menghapus garis miring ganda (seperti //) dari URL akibat kesalahan input.

  • Catatan: Fungsi regex_replace hanya mengganti kecocokan pertama dalam string sumber.

  • Kondisi pencocokan: http.request.uri.path contains "//"

  • Konfigurasi penulisan ulang:

    Rewrite object: Path

    Operation method: Dynamic

    Ekspresi: regex_replace(http.request.uri.path, "//+", "/")

  • Efek penulisan ulang:

    Permintaan pengguna: https://example.com/path//to/resource

    Permintaan origin: https://origin.com/path/to/resource

Kasus 2

  • Kasus penggunaan: Menggabungkan beberapa garis miring berturut-turut menjadi satu garis miring. Contoh: /path///download//image//user.jpg.

  • Solusi: Sisipkan beberapa panggilan regex_replace untuk mengganti garis miring berturut-turut secara progresif.

  • Kondisi pencocokan: http.request.uri.path contains "//"

  • Konfigurasi penulisan ulang:

    • Rewrite object: Path

    • Operation method: Dynamic

    • Ekspresi: regex_replace(regex_replace(regex_replace(http.request.uri.path, "//+", "/"), "//+", "/"), "//+", "/")

  • Efek penulisan ulang:

    • Permintaan pengguna: https://example.com/path///download//image//user.jpg

    • Permintaan origin: https://origin.com/path/download/image/user.jpg

Contoh 5: Hapus semua parameter kueri

  • Kasus penggunaan: Hilangkan semua parameter kueri dari resource statis. Misalnya, hapus string kueri dari URI yang diakhiri dengan .css.

  • Kondisi pencocokan: ends_with(http.request.uri.path, ".css")

  • Konfigurasi penulisan ulang:

    Rewrite object: Query string

    Operation method: Dynamic

    Ekspresi: regex_replace(http.request.uri.query, ".*", "")

  • Efek penulisan ulang:

    Permintaan pengguna: https://example.com/style.css?version=1.2.3

    Permintaan origin: https://origin.com/style.css?

Contoh 6: Sederhanakan path dinamis

  • Kasus penggunaan: Hapus rangkaian angka berlebih dari path. Misalnya, hilangkan 123 diikuti digit dari path di bawah /example/.

  • Kondisi pencocokan: (http.request.uri matches "^/example/(.*)123[0-9]+(.*)$")

  • Konfigurasi penulisan ulang:

    Rewrite object: Path

    Operation method: Dynamic

    Ekspresi: regex_replace(http.request.uri,"^/example/(.*)123[0-9]+(.*)$","/example/$1$2")

  • Efek penulisan ulang:

    Permintaan pengguna: https://example.com/example/tool12300341features

    Permintaan origin: https://origin.com/example/toolfeatures

Contoh 7: Ekstrak parameter path dan tambahkan ke string kueri

  • Kasus penggunaan: Ekstrak segmen path dinamis, tambahkan sebagai parameter kueri, dan ganti dengan string tetap:

    URI asli: /api/v1/dynamic_value/download?version=1&size=2

    URI hasil penulisan ulang: /api/v1/fixed/download?version=1&size=2&token=dynamic_value

  • Kondisi pencocokan: Semua permintaan masuk

  • Konfigurasi penulisan ulang:

    Rewrite object: Path + Query string

    Operation method: Dynamic

    Ekspresi penulisan ulang path: regex_replace(http.request.uri.path, "^/api/v1/(.*)/download$", "/api/v1/fixed/download")

    Ekspresi penulisan ulang string kueri: concat(http.request.uri.query,"&token=",regex_replace(http.request.uri.path, "^/api/v1/(.*)/download$","$1"))

  • Efek penulisan ulang:

    Permintaan pengguna: https://example.com/api/v1/ABC123/download?version=1&size=2

    Permintaan origin: https://origin.com/api/v1/fixed/download?version=1&size=2&token=ABC123

Contoh 8: Hapus parameter tertentu

  • Kasus penggunaan: Hapus parameter kueri tertentu. Misalnya, dari https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4&key5=value5&key6=value6, hapus key2, key3, key5, dan key6, hanya menyisakan key1 dan key4.

  • Kondisi pencocokan: Semua permintaan masuk

  • Konfigurasi penulisan ulang:

    Rewrite object: Query string

    Operation method: Dynamic

    Ekspresi: regex_replace(regex_replace(regex_replace(regex_replace(http.request.uri.query, "(&?key2=[^&]*)", ""), "(&?key3=[^&]*)", ""), "(&?key5=[^&]*)", ""), "(&?key6=[^&]*)", "")

    Catatan

    Setiap regex_replace bersarang menghapus satu parameter. Pola (&?keyN=[^&]*) mencocokkan karakter & sebelumnya untuk mencegah sisa karakter &.

  • Efek penulisan ulang:

    Permintaan pengguna: https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4&key5=value5&key6=value6

    Permintaan origin: https://origin.com/1.txt?key1=value1&key4=value4

Contoh 9: Simpan parameter tertentu

  • Kasus penggunaan: Simpan hanya parameter kueri tertentu. Misalnya, dari https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4, simpan hanya key1 dan key4.

  • Kondisi pencocokan: Semua permintaan masuk

  • Konfigurasi penulisan ulang:

    Rewrite object: Query string

    Operation method: Dynamic

    Ekspresi: concat("key1=", http.request.uri.args["key1"], "&key4=", http.request.uri.args["key4"])

    Catatan

    Fungsi concat membangun ulang string kueri hanya dengan parameter yang ditentukan. Gunakan http.request.uri.args["keyN"] untuk mengekstrak nilai setiap parameter. Parameter yang tidak tercantum akan dikecualikan.

  • Efek penulisan ulang:

    Permintaan pengguna: https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4

    Permintaan origin: https://origin.com/1.txt?key1=value1&key4=value4