URL path'ini backend'e gitmeden önce yeniden yazabilir miyim (rewrite)?
Kısa cevap
Evet. Set Path aksiyonu isteğin yolunu Kurum Servisine iletmeden önce değiştirir; istemci yönlendirilmez, adres çubuğu değişmez ve istek işlenmeye devam eder. Önek ekleme ya da kaldırma, sonek ve bul-değiştir işlemleri Path Operation Shortcuts ile hazırlanır; New Path Info alanı Smart Variable ve fonksiyonlarla elle de yazılabilir. Sorgu dizesi de değişecekse Set Path + Query, yolu standart biçime getirmek için URL Normalization kullanılır. Path koşulları ve TR7 logları yolun yeniden yazılmadan önceki hâlini görür.
Sorun: Dışarıdaki Adres ile Uygulamanın Beklediği Yol Farklı
Kullanıcılara /api/v1/... gibi bir adres sunulurken uygulama /v1/... bekleyebilir ya da eski bir uygulama farklı bir yol yapısıyla çalışabilir. Kullanıcının gördüğü adres değişmeden, isteğin Kurum Servisine uygulamanın beklediği yolla gitmesi gerekir.
Çözüm: Beş Yöntem
Yöntemlerin hepsi yalnızca HTTP vService'te ve istek aşamasında çalışır. Yeniden yazma işlemleri isteği sonlandırmaz; Actions listesinde kendisinden sonra gelen aksiyonlar ve Kurum Servisi seçimi çalışmaya devam eder. Path koşulları (Conditional Backend Services dahil) yolun özgün hâlini değerlendirdiği için /api/ koşuluyla ayrı sunuculara gönderilen istekte önek kaldırılsa da sunucu seçimi bozulmaz.
| Durumunuz | Uygun yöntem |
|---|---|
| Önek/sonek ekleme-kaldırma, bul-değiştir | Yöntem 1: Set Path + Path Operation Shortcuts |
| Kısayollarla hazırlanamayan özel bir yol | Yöntem 2: New Path Info'yu elle yazmak |
| Yol ile birlikte sorgu dizesi de değişecek | Yöntem 3: Set Path + Query |
Yinelenen eğik çizgi, ./.. bölümleri gibi yazım farkları | Yöntem 4: URL normalization |
| Komut satırından | Yöntem 5: WEB-CLI |
Yöntem 1: Set Path + Path Operation Shortcuts Önerilen
- Nasıl çalışır Kısayol penceresine girilen değer New Path Info ifadesine dönüştürülür; ör. Remove prefix
/api→%PATH.STRREPLACE(^/api,). - Nerede açılırLoad Balancer → Actions → Set Path → Path Operation Shortcuts
- Gereksinim Yolu değişecek istekleri ayıran bir koşul (koşulsuz Set Path bütün isteklere uygulanır)
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Conditions → Add tıklanır (nasıl eklenir).
Criteria = Path, eşleştirme Start, değer /api/ girilir. Değerin sondaki / ile yazılması /api ve /apiv2/… gibi isteklerin yanlışlıkla kırpılmasını önler (aşağıdaki tablo).
Add tıklanır.
Load Balancer → Actions → Add tıklanır (nasıl eklenir).
Action Name girilir, Action Type = Set Path seçilir.
Path Operation Shortcuts satırında Remove prefix tıklanır; açılan pencerede Prefix to remove = /api girilip onaylanır. Kısayol New Path Info alanını doldurur. Diğer kısayollar: Add prefix (varsayılan değer /api), Add suffix / Remove suffix (varsayılan .html), Find & replace (varsayılan /old → /new, bütün geçişleri değiştirir).
Conditions alanında 2. adımdaki koşul seçilir. Değişikliğin uygulandığını saymak için Hit Counter açılır (varsayılan kapalı).
Add tıklanır.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır.
Save tıklanır. Değişiklik açık bağlantılar kopmadan uygulanır; cluster'da varsayılan auto-sync ile eş cihaza da gönderilir (Manual Sync Mode açıksa Synchronize ile).
Remove prefix /api ifadesinin (%PATH.STRREPLACE(^/api,)) örnek isteklerdeki sonucu:
| İstek yolu | Path Start /api/ koşulu | Kurum Servisine giden yol |
|---|---|---|
/api/v1/users | Uyar | /v1/users |
/api/ | Uyar | / |
/api | Uymaz | /api (değişmez) |
/apiv2/x | Uymaz | /apiv2/x (değişmez; koşul olmasaydı v2/x olurdu) |
/v1/api/x | Uymaz | /v1/api/x (^ yalnızca baştaki öneki hedefler) |
Sorgu dizesi Set Path'te korunur: /api/v1/users?page=2 isteği /v1/users?page=2 olarak gider.
Doğrulama
curl -s https://www.example.com/api/v1/users gönderilir; Kurum Servisinin erişim logunda isteğin ulaştığı yola bakılır.
GET /v1/usersHit Counter açıksa vService panosunun Action Hits sekmesinde aksiyonun sayısı artar. HTTP Logs istemcinin gönderdiği özgün adresi (/api/v1/users) gösterir.
Sayı artar · logda özgün yolYöntem 2: New Path Info'yu Elle Yazmak
- Nasıl çalışır Sabit metin, Smart Variable'lar ve fonksiyonlar birleştirilerek istenen yol oluşturulur; ör.
/v2+ Path/page of the request [URI]. - Nerede açılırLoad Balancer → Actions → Set Path → New Path Info
- Gereksinim Sonuç yolun
/ile başlaması (form bunu denetlemez) - vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions → Add tıklanır.
Action Type = Set Path seçilir.
New Path Info alanı /prefix + Path/page of the request [URI] değişkeniyle dolu gelir. /prefix yerine /v2 yazılır; gerekiyorsa fx ile başka değişkenler ve fonksiyonlar eklenir. Sonuç / ile başlamalıdır.
Conditions alanında koşul seçilir.
Add tıklanır.
vService Edit ile açılır.
Details → Actions alanında aksiyon seçilir.
Save tıklanır.
Doğrulama
curl -s https://www.example.com/rapor/2024
GET /v2/rapor/2024Yöntem 3: Set Path + Query
- Nasıl çalışır Yol ve sorgu dizesi birlikte yeniden yazılır; özgün sorgu ancak Request query değişkeni ifadeye eklenirse korunur.
- Nerede açılırLoad Balancer → Actions → Set Path + Query
- Gereksinim Yok
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions → Add tıklanır.
Action Type = Set Path + Query seçilir.
New Path Info alanına yol ve sorgu birlikte yazılır; kısayollar bu tipte ifadenin sonuna Request query değişkenini kendiliğinden ekler. Ayrıntılı karşılaştırma: Set Path ile Set Path + Query arasındaki fark nedir?
Conditions alanında koşul seçilir.
Add tıklanır.
vService Edit ile açılır.
Details → Actions alanında aksiyon seçilir.
Save tıklanır.
Doğrulama
Kurum Servisinin erişim logunda yol ve sorgu birlikte görülür.
Yeniden yazılmış yol ve sorguYöntem 4: URL Normalization
- Nasıl çalışır Yol standart biçime getirilir: yinelenen eğik çizgiler birleştirilir,
.ve..bölümleri çözülür, ayrılmamış karakterlerin yüzde kodlaması açılır, sorgu parametreleri ada göre sıralanabilir. - Nerede açılırLoad Balancer → Actions → URL Normalization
- Gereksinim En az bir seçenek işaretlenir
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions → Add tıklanır.
Action Type = URL Normalization seçilir.
Normalization listesinden ihtiyaç duyulanlar işaretlenir: Merge slash characters, Re-evaluate path in accordance with one dot (.), Re-evaluate path in accordance with two dot (..), Decode percent-encoded characters, Make percent-encoded characters uppercase, Sort query parameters by name ve diğerleri.
Add tıklanır.
vService Edit ile açılır.
Details → Actions alanında aksiyon seçilir.
Save tıklanır.
Doğrulama
curl -s --path-as-is "https://www.example.com//urun//5"
Merge slash characters işaretliyse GET /urun/5Yöntem 5: WEB-CLI
- Nasıl çalışır Yöntem 1'deki koşul ve Remove prefix ifadesi WEB-CLI komutlarıyla oluşturulur;
newPathdeğeri arayüzdeki kısayolun ürettiği ifadeyle aynıdır. - Nerede açılır TR7 WEB-CLI →
lb condition·lb action·lb service - Gereksinim WEB-CLI erişimi; koşulun kimliği (ID)
- vService tipi HTTP
Adım adım yapılandırma
lb condition add criteria path query /api/ --content_placement start --name api-yoluAksiyon koşulu adıyla değil kimliğiyle bağlar. lb condition add başarılı olunca çıktı vermez; kimlik, koşul listesinin id sütununda görülür:
lb condition listlb action add type set_path name api-kirp newPath "%PATH.STRREPLACE(^/api,)" --cond <koşul-kimliği>lb service show <vService>Çıktıdaki rules.0, rules.1 … satırları vService'teki aksiyonları sırasıyla gösterir. --rules.N o sıradaki aksiyonun yerine geçer; yeni aksiyon ilk boş sıraya yazılır.
vService'te iki aksiyon (0 ve 1) varsa yeni aksiyon 2. sıraya yazılır; hiç aksiyon yoksa --rules.0 kullanılır:
lb service update id <vService> --rules.2 api-kirpDoğrulama
curl -s https://www.example.com/api/v1/users
GET /v1/usersSık Yapılan Hatalar
- Set Path'in istemciyi yönlendirdiğini sanmak. Yol yalnızca Kurum Servisine giden istekte değişir; istemcinin adresi değişmez. Kullanıcıyı başka adrese göndermek için Location Redirection kullanılır (Belirli bir URL'yi başka bir URL'ye 301/302 ile nasıl yönlendiririm?).
- Koşulsuz Set Path eklemek. Koşul boşsa bütün isteklerin yolu değişir; Remove prefix gibi ifadeler önekin bulunmadığı yolları da bozabilir.
- Koşulu
/apiolarak yazmak. Start/apikoşulu/apiv2/xisteğini de yakalar ve yolv2/xolur; koşul sondaki/ile yazılır. - Yeniden yazılan yola göre koşul beklemek. Path koşulları, aynı vService'teki sonraki aksiyonlarda ve Conditional Backend Services'te de yolun özgün hâlini değerlendirir.
- Doğrulamayı TR7 loglarında aramak. HTTP Logs istemcinin gönderdiği adresi gösterir; yeniden yazılmış yol Kurum Servisinin logunda görülür.
- Kurum Servisinin döndürdüğü yönlendirmeleri unutmak. Sunucu yeni yola göre
Locationbaşlığı üretiyorsa (ör./v1/login), başlık On Response'ta Replace HTTP Header Content ile düzeltilir (Header değerini regex ile değiştirebilir miyim?).
Dokümantasyonda nasıl yapılır
