Belirli bir URL'yi başka bir URL'ye 301/302 ile nasıl yönlendiririm?
Kısa cevap
Eski adresi tanımlayan bir Path koşulu (ör. Exact Match, /eski-sayfa) oluşturulur; Location Redirection aksiyonunda Redirect Code ve Redirect Location (yeni adres) girilip koşul seçilir ve aksiyon vService'in Actions alanına eklenir. Kalıcı taşımada 301, geçici yönlendirmede 302 seçilir; POST isteğinin aynı yöntemle gitmesi gerekiyorsa 308 ya da 307 seçilir. Location redirection koşulsuz kaydedilirse hiç çalışmaz.
Temel Bilgi
Yönlendirme yanıtı, istemciye bir 3xx durum kodu ve gidilecek adresi taşıyan Location başlığı gönderir; tarayıcı bu adrese yeni bir istek yapar. Kodlar iki soruya göre seçilir: taşıma kalıcı mı, POST gibi istekler aynı yöntemle mi tekrarlanmalı (RFC 9110 · 15.4 Redirection 3xx).
| Kod | Anlamı | Yöntem | Ne zaman |
|---|---|---|---|
| 301 Moved Permanently | Kaynak kalıcı olarak taşındı; arama motorları yeni adresi dizine alır, tarayıcılar yanıtı önbelleğe alabilir | Tarayıcılar POST'u GET'e çevirebilir | Kalıcı adres değişikliği (SEO) |
| 302 Found | Kaynak geçici olarak başka adreste; eski adres geçerliliğini korur | Tarayıcılar POST'u GET'e çevirebilir | Kampanya, geçici bakım, deneme |
| 303 See Other | Sonuç başka bir adreste; tarayıcı GET ile gider | Her zaman GET | Form gönderiminden sonra sonuç sayfası |
| 307 Temporary Redirect | 302 gibi geçici | Yöntem ve gövde korunur | Geçici taşımada POST/PUT |
| 308 Permanent Redirect | 301 gibi kalıcı | Yöntem ve gövde korunur | Kalıcı taşımada POST/PUT |
Sorun: Adresi Değişen Sayfalar Kırık Bağlantıya Dönüşüyor
Bir sayfanın adresi değiştiğinde eski adrese gelen kullanıcılar ve arama motorları 404 alır; eski bağlantılardan gelen trafik ve arama sıralaması kaybolur. Eski adrese gelen isteğin, Kurum Servisine gitmeden yeni adrese yönlendirilmesi gerekir.
Çözüm: Beş Yöntem
Yöntemlerin hepsi aynı Location Redirection aksiyonunu kullanır; eski adresin nasıl tanındığı ve yeni adresin nasıl üretildiği değişir. Yönlendirme yalnızca HTTP vService'te çalışır.
| Durumunuz | Uygun yöntem |
|---|---|
| Tek bir sayfa başka bir adrese taşındı | Yöntem 1: Location redirection + Path koşulu |
Eski adres belirli bir sorgu dizesiyle tanımlı (/urun.php?id=5) | Yöntem 2: Path + Query ya da URL koşulu |
Bir yol önekinin tamamı taşındı (/blog/… → /haber/…) | Yöntem 3: Replace (first) ile önek değiştirme |
| Çok sayıda eski adres → yeni adres eşlemesi var | Yöntem 4: Dynamic list + Mapping |
| Komut satırından yapılandırma | Yöntem 5: WEB-CLI |
Yöntem 1: Location Redirection + Path Koşulu Önerilen
- Nasıl çalışır Koşula uyan istek Kurum Servisine gitmez; TR7 seçilen kodla ve yeni adresle yanıt verir.
- Nerede açılırLoad Balancer → Conditions · Load Balancer → Actions · vService → Details → Actions
- Gereksinim En az bir koşul; koşulsuz Location redirection çalışmaz
- vService tipi HTTP
Adım adım yapılandırma
Sol alttaki TR7 logosuyla açılan menüde Load Balancer → Conditions → Add tıklanır (nasıl eklenir).
Criteria = Path, eşleştirme yöntemi Exact Match (varsayılan), değer /eski-sayfa girilir. Path değeri sorgu dizesini içermez; /eski-sayfa?x=1 isteği de bu koşula uyar. Büyük/küçük harf farkı gözetilmeyecekse Case Insensitive işaretlenir.
Formun altındaki Add tıklanır.
Load Balancer → Actions → Add tıklanır (nasıl eklenir).
Action Name girilir, Action Type = Location Redirection seçilir.
- Redirect Code: varsayılanı 301: Moved Permanently. Seçenekler: 301: Moved Permanently, 302: Found (Moved Temporarily), 303: See Other, 307: Temporary Redirect, 308: Permanent Redirect.
- Redirect Location (zorunlu):
/yeni-sayfa(aynı alan adı) ya dahttps://www.example.com/yeni-sayfa(başka alan adı). Adres girildiği gibi kullanılır; eski isteğin sorgu dizesi kendiliğinden eklenmez, korunacaksa fx ile Request query değişkeni adresin sonuna eklenir. - Conditions: 2. adımdaki koşul seçilir.
- Hit Counter (varsayılan kapalı) açılırsa yönlendirmeler sayılır.
Formun altındaki Add tıklanır.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır (Edit).
Details açılır ve Actions alanında aksiyon seçilir. Aksiyonlar listedeki sırayla işlenir; yönlendirme isteği bitirdiği için kendisinden sonraki aksiyonlar bu istekte çalışmaz (aksiyon sıralaması).
Save tıklanır. Değişiklik açık bağlantılar kopmadan uygulanır; ilerleme ekranın sağ altındaki senkron göstergesinde izlenir. Cluster'da varsayılan auto-sync ile eş cihaza da gönderilir; Manual Sync Mode açıksa eş cihaza Synchronize ile gönderilir.
Doğrulama
curl -sI http://www.example.com/eski-sayfa
HTTP/1.1 301 Moved Permanently + Location: /yeni-sayfaHit Counter açıksa vService panosunun Action Hits sekmesinde aksiyonun sayısı artar; HTTP Logs ekranında istek 301 durum koduyla görünür.
Sayı artar · durum kodu 301Yöntem 2: Path + Query ya da URL Koşulu
- Nasıl çalışır Eski adres belirli bir sorgu dizesiyle tanımlıysa (
/urun.php?id=5) koşul yolu ve sorguyu birlikte karşılaştırır; yalnızca o istek yönlendirilir. - Nerede açılırLoad Balancer → Conditions → Path + Query ya da URL
- Gereksinim Sorgu dizesi istekte her zaman aynı sırayla gelmeli (Exact match birebir karşılaştırır)
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Conditions → Add tıklanır.
Criteria = Path + Query, eşleştirme Exact match, değer /urun.php?id=5 girilir. Alan adı da ayırt edilecekse Criteria = URL seçilir ve değer şema ile birlikte yazılır: http://www.example.com/urun.php?id=5. URL değeri isteğin şemasını da içerdiğinden HTTPS ile gelen istek için ayrı bir https://www.example.com/urun.php?id=5 koşulu eklenir ve iki koşul aksiyonda or ile seçilir.
Add tıklanır.
Load Balancer → Actions → Add tıklanır.
Yöntem 1'in 5. adımındaki gibi Location Redirection tanımlanır; Redirect Location = /urunler/5, Conditions alanında bu 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 -sI "http://www.example.com/urun.php?id=5" ve karşılaştırma için curl -sI "http://www.example.com/urun.php?id=6"
id=5 → 301 + Location: /urunler/5 · id=6 → yönlendirme yokYöntem 3: Replace (first) ile Önek Değiştirme
- Nasıl çalışır Redirect location, isteğin yolunu Smart Variable olarak alır ve Replace (first) fonksiyonuyla önekini değiştirir;
/blog/altındaki her sayfa/haber/altındaki karşılığına gider. - Nerede açılırLocation Redirection → Redirect Location → fx
- Gereksinim Önek dışındaki yol yapısı yeni adreste aynı kalmalı
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Conditions → Add tıklanır.
Criteria = Path, eşleştirme Start, değer /blog/ girilir. Case insensitive işaretlenmez: fonksiyondaki ^/blog/ kalıbı büyük/küçük harfe duyarlıdır; koşul /BLOG/yazi isteğini de yakalarsa adres değişmeden aynı yere yönlendirilir ve döngü oluşur.
Add tıklanır.
Load Balancer → Actions → Add tıklanır.
Action Name girilir, Action Type = Location Redirection, Redirect Code = 301: Moved Permanently seçilir.
Redirect Location alanındaki fx ile Path/page of the request [URI] değişkeni eklenir (Variables).
Değişken penceresinde Add Functions açılır ve Replace (first) seçilir: To Replace = ^/blog/, New Value = /haber/. To Replace alanı düzenli ifadedir; ^ yalnızca yolun başındaki /blog/ bölümünü değiştirir.
Aynı alanda yol değişkeninin arkasına fx ile Request query değişkeni eklenir. Bu değişken sorgu dizesini başındaki ? ile birlikte verir, sorgu yoksa boş kalır; araya ayrıca ? yazılmaz.
Conditions alanında 2. adımdaki 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.
Kalıbın örnek isteklerdeki sonucu:
| İstek | Location |
|---|---|
/blog/yazi-1 | /haber/yazi-1 |
/blog/2024/ocak/yazi?utm=x&p=2 | /haber/2024/ocak/yazi?utm=x&p=2 |
/blog/ | /haber/ |
/blog/blog/x | /haber/blog/x (yalnızca baştaki önek değişir) |
/blog (sonda / yok) | Koşul uymaz; yönlendirilmez. Bu adres de taşınacaksa Exact match /blog için Yöntem 1 ile ayrı bir yönlendirme eklenir |
Doğrulama
curl -sI "http://www.example.com/blog/2024/yazi?p=2"
301 + Location: /haber/2024/yazi?p=2Yöntem 4: Dynamic List + Mapping ile Toplu Eşleme
- Nasıl çalışır Eski yollar bir Dynamic List koşulunda aranır; Redirect location, Mapping (exact match) fonksiyonuyla her eski yolu kendi yeni yoluna çevirir. Tek koşul ve tek aksiyonla yüzlerce eşleme yönetilir.
- Nerede açılırConditions → Dynamic List · Redirect Location → fx → Mapping (exact match)
- Gereksinim Eşleme listesindeki her eski yol koşulun listesinde de bulunmalı; yollar boşluk içermemeli
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Conditions → Add tıklanır.
Criteria = Dynamic List seçilir. Key to Search alanındaki varsayılan istemci IP değişkeni silinip fx ile Path/page of the request [URI] eklenir; Search Method = Exact match; List alanına eski yollar her satıra bir tane yazılır (/urun-a, /urun-b, /hakkimizda.html).
Add tıklanır.
Load Balancer → Actions → Add tıklanır.
Action Type = Location Redirection, Redirect Code = 301: Moved Permanently seçilir.
Redirect Location alanındaki fx ile Path/page of the request [URI] eklenir, Add functions → Mapping (exact match) seçilir ve listeye her satıra eski-yol yeni-yol yazılır:
/urun-a /urunler/a
/urun-b /urunler/b
/hakkimizda.html /kurumsal/hakkimizdaArdından sorgu dizesini korumak için Request query değişkeni eklenir.
Conditions alanında 2. adımdaki 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.
Mapping'de hiçbir satır eşleşmezse sonuç boş olur; bu yüzden koşul listesi ile eşleme listesi aynı eski yolları içermelidir. /urun-a/ (sonda /) gibi bir istek ne listeye ne eşlemeye uyar ve yönlendirilmez.
Doğrulama
Listedeki her eski yol curl -sI ile istenir; listede olmayan bir yol da denenir.
/urun-a → 301 + Location: /urunler/a · listede olmayan yol yönlendirilmezYöntem 5: WEB-CLI
- Nasıl çalışır Koşul, aksiyon ve vService bağlantısı WEB-CLI komutlarıyla oluşturulur; sonuç Yöntem 1 ile 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
Path koşulu eklenir; eşleştirme belirtilmezse Exact match kullanılır:
lb condition add criteria path query /eski-sayfa --name eski-sayfaAksiyon koşulu adıyla değil kimliğiyle (ID) bağlar. lb condition add başarılı olunca çıktı vermez; kimlik, koşul listesinin id sütununda koşulun adının yanında görülür:
lb condition listlb action add type req_redirect_location name eski-yeni redirectLoc /yeni-sayfa --redirectCode 301 --cond <koşul-kimliği>--redirectCode her zaman yazılır; yazılmazsa komut satırının varsayılanı olan 300 (Multiple Choices) kaydedilir, arayüzdeki 301 varsayılanı burada geçerli değildir. --cond yazılmazsa aksiyon kaydedilir ama hiç çalışmaz.
lb service show <vService>Çıktıdaki rules.0, rules.1 … satırları vService'teki aksiyonları sırasıyla gösterir. lb service update komutunda --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 eski-yeniDoğrulama
lb service show <vService> çıktısında rules.N satırlarına bakılır; ardından curl -sI http://www.example.com/eski-sayfa denenir.
rules.2 = eski-yeni, önceki aksiyonlar yerinde · 301 + Location: /yeni-sayfaSık Yapılan Hatalar
Koşulsuz Location redirection çalışmaz
Location redirection koşul seçilmeden de kaydedilir ama hiçbir isteği yönlendirmez; arayüz bu durumda uyarı vermez. Her yönlendirmede en az bir koşul seçilir (Location Redirection veya User Authentication (On HTTP request) action'ını koşulsuz eklersem neden çalışmıyor?).
- Sorgu dizesinin kendiliğinden taşınacağını sanmak. Redirect location girildiği gibi kullanılır; sorgu dizesi korunacaksa Request query ya da Path + query of the request değişkeni eklenir.
- Denemeyi 301 ile yapmak. Tarayıcılar 301'i önbelleğe alır; yanlış bir kural düzeltilse bile ziyaretçi eski hedefe gitmeye devam edebilir. Kural önce 302 ile denenir, doğrulandıktan sonra 301'e çevrilir.
- POST isteklerini 301/302 ile yönlendirmek. Tarayıcılar bu kodlarda POST'u GET'e çevirebilir ve form verisi kaybolur; yöntem korunacaksa 308 ya da 307 seçilir.
- Döngü kurmak. Yeni adres aynı vService'e gelip koşulu yine sağlıyorsa (ör. Path Start
/urunkoşulu ve hedef/urunler/…) istek sonsuz yönlendirilir; TR7 bunu engellemez. Koşul hedef adresi kapsamayacak biçimde dar tutulur. - Önek yönlendirmesinde Case insensitive işaretlemek. Replace (first) kalıbı büyük/küçük harfe duyarlıdır; büyük harfli istek değişmeden aynı adrese yönlendirilir ve döngü oluşur.
- Network ya da L7 TCP vService'te denemek. Location redirection yalnızca HTTP vService'in Actions listesinde görünür.
Dokümantasyonda nasıl yapılır
İlgili sorular
