www ekleme / kaldırma yönlendirmesini nasıl yaparım?
Kısa cevap
Host başlığına bakan bir HTTP Header koşulu (Header Name Host, Exact Match, Case Insensitive) oluşturulur; Location Redirection aksiyonunda Redirect Location olarak hedef alan adı ve Path + query of the request değişkeni yazılır, aksiyon vService'in Actions alanına eklenir. www eklemek için koşul example.com, hedef https://www.example.com; www kaldırmak için koşul www.example.com, hedef https://example.com olur. İki ad da DNS'te vService'in IP'sine gitmeli ve vService'in Certificate alanındaki sertifika iki adı da kapsamalıdır.
Sorun: Site İki Farklı Adla Açılıyor
Site hem example.com hem www.example.com adıyla açıldığında arama motorları iki ayrı site görür; bağlantı değeri, çerezler ve analizler iki ada bölünür. Tek bir kanonik ad seçilir ve diğer ada gelen istekler aynı yol ve sorguyla kanonik ada 301 ile yönlendirilir.
Çözüm: Dört Yöntem
Yönlendirme yalnızca HTTP vService'te yapılır. Önce iki adın DNS kaydının vService'in IP'sine gittiği ve HTTPS'te sertifikanın iki adı da kapsadığı doğrulanır; HTTPS isteği yönlendirme yanıtını almadan önce TLS el sıkışmasını tamamlamak zorundadır.
| Durumunuz | Uygun yöntem |
|---|---|
| Tek alan adı için www ekleme ya da kaldırma | Yöntem 1: Host koşulu + Location redirection |
| Birçok alan adında www'yu tek kuralla kaldırma | Yöntem 2: Replace (first) ile genel kural |
| Kanonik olmayan ad ayrı bir vService'te karşılanacak | Yöntem 3: Ayrı vService + Always |
| Komut satırından | Yöntem 4: WEB-CLI |
Yöntem 1: Host Koşulu + Location Redirection Önerilen
- Nasıl çalışır Kanonik olmayan adla gelen istek, aynı yol ve sorguyla kanonik ada 301 ile yönlendirilir; kanonik ada gelen istekler etkilenmez.
- Nerede açılırLoad Balancer → Conditions · Load Balancer → Actions · vService → Details → Actions
- Gereksinim İki ad DNS'te vService'in IP'sine gider; HTTPS'te sertifika iki adı kapsar
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Conditions → Add tıklanır (nasıl eklenir).
Criteria = HTTP Header; Header Name alanının solundaki seçicide Request, ad olarak Host bırakılır (form bu değerlerle açılır); eşleştirme Exact match, Case Insensitive işaretli. Değer, www eklemek için example.com, www kaldırmak için www.example.com girilir.
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 = 301: Moved Permanently (varsayılan). Redirect Location alanına https://www.example.com (www kaldırmak için https://example.com) yazılır ve hemen arkasına fx ile Path + query of the request değişkeni eklenir; araya / yazılmaz, değişken yolu / ile başlatır.
Conditions alanında 2. adımdaki koşul seçilir.
Add tıklanır.
Load Balancer → Load Balancer vService List ekranında iki adı da karşılayan 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).
Hedef doğrudan https:// ile yazıldığından http://example.com/sayfa isteği tek yanıtla https://www.example.com/sayfa adresine gider. Location redirection, frontend satırındaki HTTP → HTTPS yönlendirmesinden önce değerlendirilir; istemci önce https://example.com'a, sonra www'ya giden iki adımlı bir zincir görmez.
Doğrulama
curl -sI "http://example.com/sayfa?x=1" ve curl -sI "https://example.com/sayfa?x=1"
301 + Location: https://www.example.com/sayfa?x=1curl -sI https://www.example.com/sayfa
Kurum Servisinin yanıtı (yönlendirme yok)Yöntem 2: Replace (first) ile Genel Kural
- Nasıl çalışır Host değeri Smart Variable olarak alınır ve Replace (first) fonksiyonuyla baştaki
www.silinir; aynı vService'teki bütün alan adları tek aksiyonla www'suz adlarına yönlendirilir. - Nerede açılırLocation Redirection → Redirect Location → fx
- Gereksinim www'suz adların hepsi DNS'te ve sertifikada bulunur
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Conditions → Add tıklanır.
Criteria = HTTP Header, Header Name = Request Host, eşleştirme Start, değer www. girilir. Case insensitive işaretlenmez: fonksiyondaki ^www\. kalıbı küçük harfle eşleşir; koşul WWW. ile başlayan bir adı da yakalarsa adres değişmeden aynı ada yönlendirilir ve döngü oluşur. Tarayıcılar alan adını her zaman küçük harfle gönderir.
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ına https:// yazılır; arkasına fx ile Request HTTP header content değişkeni eklenir ve başlık adı olarak host girilir.
Değişken penceresinde Add Functions → Replace (first) seçilir: To Replace = ^www\., New Value boş bırakılır (eşleşen bölüm silinir). Noktanın önündeki \ zorunludur; kaçışsız . herhangi bir karakterle eşleşir.
Aynı alanda arkasına fx ile Path + query of the request 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.
Kalıbın örnek isteklerdeki sonucu:
| Host | İstek | Location |
|---|---|---|
www.example.com | /sayfa?x=1 | https://example.com/sayfa?x=1 |
www.example.org | / | https://example.org/ |
www.shop.example.com.tr | /urun/5 | https://shop.example.com.tr/urun/5 |
example.com, api.example.com | - | Koşul uymaz; yönlendirilmez |
www.example.com:8443 | /a | https://example.com:8443/a (standart dışı portta Host portu da taşır ve hedefe aynen geçer) |
Bu kural yalnızca www kaldırmak içindir. Genel bir www ekleme kuralı, api. gibi başka alt alan adlarını da yakalayacağından her ad için Yöntem 1 kullanılır.
Doğrulama
Her alan adı curl -sI "https://www.example.org/a?b=1" biçiminde denenir.
301 + Location: https://example.org/a?b=1Yöntem 3: Ayrı vService + Always
- Nasıl çalışır Kanonik olmayan ad Virtual Hosting ile aynı IP ve portu paylaşan ayrı bir vService'e alınır; bu vService'e gelen bütün istekler hazır Always koşuluyla kanonik ada yönlendirilir.
- Nerede açılır vService → Virtual Hosting · Load Balancer → Actions
- Gereksinim Aynı IP ve portu paylaşan bütün vService'lerde Virtual hosting listesi dolu
- vService tipi HTTP
Adım adım yapılandırma
Aynı IP ve portu kullanan mevcut vService Edit ile açılır.
Virtual Hosting listesine yalnızca kanonik ad (www.example.com) yazılır. Aynı IP ve portu paylaşan bütün vService'lerde liste dolu olmalıdır (Tek bir public IP'nin arkasında birden fazla web sitesi yayınlayabilir miyim?).
Save tıklanır.
Load Balancer → Actions → Add tıklanır.
Action Name girilir, Action Type = Location Redirection seçilir; Redirect Code = 301: Moved Permanently, Redirect Location = https://www.example.com + Path + query of the request, Conditions = hazır Always koşulu.
Add tıklanır.
Load Balancer → Load Balancer vService List → Add tıklanır; HTTP vService formu açılır (nasıl eklenir).
Frontend satırında mevcut vService'le aynı IP, port ve şifreleme sınıfında bir protokol seçilir; HTTPS'te Certificate alanında example.com adını kapsayan sertifika seçilir (sertifika yoksa önce yüklenir: Sertifikamı TR7'ye nasıl yüklerim; hangi formatlar destekleniyor?). Virtual Hosting listesine yalnızca example.com yazılır; Details → Actions alanında 5. adımdaki aksiyon seçilir.
Save tıklanır.
Doğrulama
curl -sI https://example.com/sayfa
301 + Location: https://www.example.com/sayfaYöntem 4: WEB-CLI
- Nasıl çalışır Kanonik olmayan ad, isteğin tam adresini (şema, Host, yol ve sorgu) taşıyan bir URL koşulunda regex ile yakalanır; Location redirection aksiyonu 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
URL koşulu www eklemek için example.com adını yakalar (www kaldırmak için kalıp "^https?://www\.example\.com/" yazılır):
lb condition add criteria url query "^https?://example\.com/" --content_placement regex --caseInsensitive true --name www-siz-ad| URL | Sonuç |
|---|---|
http://example.com/sayfa?x=1, https://EXAMPLE.COM/a | Eşleşir |
https://www.example.com/a, https://api.example.com/a, https://example.com.tr/a | Eşleşmez |
https://example.com:8443/a | Eşleşmez (standart dışı portta Host portu da taşır) |
Aksiyon 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 list%PATHQ, Path + query of the request değişkenidir; --redirectCode her zaman yazılır (yazılmazsa komut satırının varsayılanı 300 kaydedilir):
lb action add type req_redirect_location name www-ekle redirectLoc "https://www.example.com%PATHQ" --redirectCode 301 --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 www-ekleDoğrulama
curl -sI "http://example.com/sayfa?x=1"
301 + Location: https://www.example.com/sayfa?x=1Sık Yapılan Hatalar
- Sertifikayı gözden kaçırmak. HTTPS isteği yönlendirme almadan önce TLS el sıkışmasını tamamlar; sertifika iki adı da kapsamalıdır.
*.example.comçıplakexample.comadını kapsamaz. - Yolu ve sorguyu düşürmek. Redirect location'a Path + query of the request eklenmezse her istek ana sayfaya gider.
- Hedefi de kapsayan koşul yazmak. Host Includes
example.comkoşuluwww.example.com'u da yakalar ve yönlendirme döngüye girer; Exact match kullanılır. - Standart dışı portu unutmak. 8443 gibi portlarda Host değeri portu da içerir (
example.com:8443); Exact matchexample.combu isteğe uymaz (Host Header'ına göre yönlendirme yapabilir miyim?). - Yöntem 2'de Case insensitive işaretlemek.
WWW.ile başlayan ad koşula uyar ama^www\.kalıbına uymaz; istek değişmeden aynı ada yönlendirilir. - HTTP'den HTTPS'e geçişi ayrıca çözmemek. www yönlendirmesi yalnızca kanonik olmayan adı kapsar; kanonik ada HTTP ile gelen istekler için HTTP'den HTTPS'e yönlendirmeyi nasıl yaparım?
Dokümantasyonda nasıl yapılır
