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
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
-
Periksa cache: Node tepi mencari cache berdasarkan URL asli. Jika terjadi cache miss, aturan penulisan ulang URL mengubah URL menjadi path target.
-
Permintaan asal: URL yang telah ditulis ulang dikirim ke server origin. Responsnya di-cache menggunakan URL asli sebagai kunci cache.
-
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
-
Di Konsol ESA, pilih Websites, lalu pada kolom Website, klik situs target.
-
Pada panel navigasi kiri, pilih .
-
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/pathDynamic
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=apiDynamic
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.pngPermintaan 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=10Permintaan 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
useriddanuid). Satukan menjadiuser_idyang 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=123Permintaan 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_replacehanya 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/resourcePermintaan 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_replaceuntuk 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.3Permintaan origin:
https://origin.com/style.css?
Contoh 6: Sederhanakan path dinamis
-
Kasus penggunaan: Hapus rangkaian angka berlebih dari path. Misalnya, hilangkan
123diikuti 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/tool12300341featuresPermintaan 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=2URI 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=2Permintaan 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=[^&]*)", "")CatatanSetiap
regex_replacebersarang 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=value6Permintaan 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"])CatatanFungsi
concatmembangun ulang string kueri hanya dengan parameter yang ditentukan. Gunakanhttp.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=value4Permintaan origin:
https://origin.com/1.txt?key1=value1&key4=value4