Cloudflare Page Rules ile URL Yönlendirme ve Kural Yönetimi

Cloudflare’i sadece DDoS koruması veya CDN olarak kullananlar, aslında ellerindeki en güçlü araçlardan birini görmezden geliyor: Page Rules. Doğru yapılandırılmış bir Page Rules seti, sunucunuza tek bir istek bile gitmeden onlarca yönlendirme, güvenlik ve performans kuralını otomatik olarak uygulayabilir. Bu yazıda Cloudflare Page Rules’u gerçek dünya senaryolarıyla, uygulanabilir örneklerle ve “neden böyle yapmalıyım?” sorusunun cevaplarıyla birlikte ele alacağız.

Page Rules Nedir ve Neden Önemlidir

Cloudflare Page Rules, belirli URL kalıplarına uyan isteklere özel davranışlar tanımlamanı sağlayan bir sistemdir. Nginx veya Apache’de rewrite ve redirect direktifleriyle yaptığın şeylerin bir kısmını, sunucuna dokunmadan Cloudflare tarafında halledebilirsin.

Temel avantajları şunlardır:

  • Sunucu yükünü azaltır: Yönlendirmeler Cloudflare edge noktalarında çözülür, sunucuna ulaşmaz
  • Hız: Edge’de gerçekleşen yönlendirmeler milisaniyeler içinde tamamlanır
  • Merkezi yönetim: Birden fazla sunucuda aynı kuralı tekrarlamamak için tek nokta yapılandırması
  • SSL/TLS entegrasyonu: HTTP’den HTTPS’e geçişi sunucu yapılandırması olmadan sağlarsın

Cloudflare’in ücretsiz planında 3 Page Rule hakkın var. Pro planda 20, Business planda 50’ye çıkıyor. Bu yüzden kuralları verimli yazmak kritik önem taşıyor.

URL Eşleştirme Sözdizimi

Page Rules’daki en önemli kavram URL kalıp eşleştirmesidir. Cloudflare burada * (yıldız) joker karakterini kullanır ama bu bir regex değil, basit bir glob desenidir.

Temel Eşleştirme Kuralları

  • example.com/*: example.com altındaki tüm yollar
  • .example.com/: tüm alt domainler ve yollar
  • example.com/blog*: /blog ile başlayan tüm yollar
  • example.com/*/feed: herhangi bir dizin altındaki /feed yolu
  • example.com/: example.com içeren tüm URL’ler (dikkatli kullan)

Joker karakteriyle yakaladığın değeri yönlendirme hedefinde $1, $2 gibi değişkenlerle kullanabilirsin. Bu özellik dinamik yönlendirmelerin temelini oluşturuyor.

Pratik Senaryo 1: HTTP’den HTTPS’e Zorunlu Yönlendirme

En yaygın kullanım senaryosundan başlayalım. Sitenize HTTP ile gelen tüm ziyaretçileri HTTPS’e yönlendirmek istiyorsun.

# Kural yapılandırması (Cloudflare Dashboard'da)
URL Kalıbı: http://example.com/*
Ayar: Always Use HTTPS

Ancak bunu yapmanın daha iyi bir yolu var. Cloudflare’de SSL/TLS > Edge Certificates bölümünde “Always Use HTTPS” toggle’ını açarsan, bunu bir Page Rule harcamadan halledebilirsin. Page Rule hakkını başka işler için sakla.

Ama alt domain bazlı kontrol gerekiyorsa Page Rule kaçınılmaz olur:

# Sadece belirli alt domaini HTTPS'e zorla
URL Kalıbı: http://shop.example.com/*
Ayar: Always Use HTTPS

# Diğer alt domainler etkilenmez

Pratik Senaryo 2: www ile www Olmayan Domain Yönlendirmesi

Klasik problem: www.example.com ile example.com arasında tutarlılık sağlamak. SEO açısından ikisine ayrı içerik sunmak felaket olur.

DNS tarafında önce şunu yapmalısın:

# Cloudflare DNS'de
A kaydı: example.com -> 192.0.2.1 (Proxied)
CNAME kaydı: www -> example.com (Proxied)

Ardından Page Rule:

# www'yi bare domain'e yönlendir
URL Kalıbı: www.example.com/*
Eylem: Forwarding URL (301 Permanent)
Hedef: https://example.com/$1

Burada $1, URL kalıbındaki * tarafından yakalanan değeri temsil ediyor. Yani www.example.com/blog/post-1 isteği https://example.com/blog/post-1 adresine gidecek. Yol bilgisi kaybolmuyor.

Tersi için de aynı mantık geçerli:

# Bare domain'i www'ye yönlendir
URL Kalıbı: example.com/*
Eylem: Forwarding URL (301 Permanent)
Hedef: https://www.example.com/$1

Pratik Senaryo 3: Eski URL Yapısından Yeni Yapıya Geçiş

Sitenin URL yapısını değiştirdin. Eskiden /urunler/kategori/urun-adi olan yapı artık /kategori/urun-adi şeklinde. Hem kullanıcı deneyimi hem SEO için eski linklerin çalışmaya devam etmesi gerekiyor.

# Eski /urunler/ prefix'ini kaldır
URL Kalıbı: example.com/urunler/*
Eylem: Forwarding URL (301 Permanent)
Hedef: https://example.com/$1

Bu kural example.com/urunler/elektronik/laptop-model-x isteğini example.com/elektronik/laptop-model-x adresine yönlendirir. Tek bir kuralla binlerce URL’yi çözdün.

Daha karmaşık bir senaryo: Blog platformu değişikliği. WordPress’ten Ghost’a geçiyorsun ve URL formatları farklı:

# WordPress: /2023/05/15/makale-basligi/
# Ghost: /makale-basligi/

URL Kalıbı: example.com/20*/*/*/* 
Eylem: Forwarding URL (301 Permanent)
Hedef: https://example.com/$4

Burada $1 yıl, $2 ay, $3 gün, $4 slug oluyor. Tarih içeren tüm WordPress URL’leri temiz slug’a yönlendiriliyor.

Pratik Senaryo 4: Cache Kontrolü

Cloudflare varsayılan olarak statik içerikleri (resim, CSS, JS) cache’ler ama dinamik sayfaları cache’lemez. Bunu Page Rules ile özelleştirebilirsin.

# API endpoint'lerini asla cache'leme
URL Kalıbı: example.com/api/*
Ayar: Cache Level = Bypass

# Sonuç: Tüm API istekleri direkt sunucuya geçer
# Statik asset'leri agresif cache'le
URL Kalıbı: example.com/static/*
Ayar: Cache Level = Cache Everything
Edge Cache TTL = 1 month
Browser Cache TTL = 1 year
# Admin panelini tamamen bypass et
URL Kalıbı: example.com/wp-admin/*
Ayar 1: Cache Level = Bypass
Ayar 2: Security Level = High
Ayar 3: Disable Performance

WordPress admin paneli için bu yapılandırma kritik. Cache’lenmiş admin sayfaları hem güvenlik açığı oluşturur hem de işlevsellik sorunlarına yol açar.

Pratik Senaryo 5: Farklı Domainler Arası Yönlendirme

Şirket isim değişikliği, marka yenileme veya eski bir domain’in yeni bir yapıya taşınması durumu. eski-sirket.com adresine gelen her şeyi yeni-sirket.com adresine yönlendirmek:

# DNS: eski-sirket.com'u Cloudflare'e bağla
# Cloudflare'de eski-sirket.com için zone ekle

# Page Rule (eski-sirket.com zone'unda)
URL Kalıbı: eski-sirket.com/*
Eylem: Forwarding URL (301 Permanent)
Hedef: https://yeni-sirket.com/$1

Burada dikkat etmen gereken nokta: Her iki domain da Cloudflare’de aktif olmalı ya da en azından eski domain’in DNS’i Cloudflare üzerinden çözümlenmeli.

Birden fazla eski domain varsa:

# eski-domain-1.com zone'unda
URL Kalıbı: eski-domain-1.com/*
Hedef: https://yeni-domain.com/$1

# eski-domain-2.com zone'unda
URL Kalıbı: eski-domain-2.com/*
Hedef: https://yeni-domain.com/$1

Pratik Senaryo 6: Geo-Based Yönlendirme Simülasyonu

Cloudflare Workers olmadan tam geo-yönlendirme yapamassın ama Page Rules ile bazı temel senaryoları çözebilirsin. Örneğin /tr/ ve /en/ path prefix’leri kullanan bir sitede varsayılan dili yönlendirme:

# Root'a gelen istekleri varsayılan dile yönlendir
URL Kalıbı: example.com/
Eylem: Forwarding URL (302 Temporary)
Hedef: https://example.com/tr/

# Not: 302 kullan, henüz kesin karar vermemişsen

302 (Geçici) yönlendirme burada önemli. Geo-yönlendirme kararlarını her zaman geçici tut çünkü bu kararlar değişebilir ve 301 arama motorları tarafından uzun süre cache’lenir.

Pratik Senaryo 7: Güvenlik Odaklı Kurallar

Page Rules’u güvenlik amacıyla kullanmak da oldukça etkili:

# Hassas dosyaları blokla
URL Kalıbı: example.com/*.env
Eylem: Security Level = I'm Under Attack

# .git dizinini koru
URL Kalıbı: example.com/.git/*
Eylem: Security Level = I'm Under Attack
# Login sayfasına ekstra güvenlik
URL Kalıbı: example.com/giris*
Ayar 1: Security Level = High
Ayar 2: Cache Level = Bypass
Ayar 3: Disable Apps
# XML-RPC endpoint'ini devre dışı bırak (WordPress için)
URL Kalıbı: example.com/xmlrpc.php
Eylem: Security Level = I'm Under Attack

# Bu endpoint brute force saldırılarının hedefidir

Page Rules Öncelik Sıralaması

Cloudflare’de birden fazla Page Rule tanımladığında hangi kuralın uygulanacağını belirlemek için öncelik sıralaması kritik. En üstteki kural en yüksek önceliğe sahiptir ve bir URL birden fazla kuralla eşleşirse sadece ilk eşleşen kural uygulanır.

Örnek senaryo:

# Kural 1 (Öncelik: 1)
URL: example.com/blog/ozel-icerik/*
Eylem: Security Level = High

# Kural 2 (Öncelik: 2)  
URL: example.com/blog/*
Eylem: Cache Level = Cache Everything

# Kural 3 (Öncelik: 3)
URL: example.com/*
Eylem: Browser Cache TTL = 4 hours

example.com/blog/ozel-icerik/makale isteği sadece Kural 1’i tetikler. example.com/blog/genel-makale isteği sadece Kural 2’yi tetikler.

Bu davranışın önemi: Daha spesifik kuralları her zaman listenin üstüne koy. Genel kurallar alta.

Forwarding URL Tipleri: 301 mi, 302 mi?

Bu konuda sysadmin olarak kesin bir tutum geliştirmelisin:

  • 301 (Kalıcı Yönlendirme): Arama motorları eski URL’yi indeksden kaldırır, PageRank yeni URL’ye aktarılır. Kullanıcı tarayıcısı bu yönlendirmeyi cache’ler. Geri alması zordur.
  • 302 (Geçici Yönlendirme): Arama motorları eski URL’yi indeksde tutar. Tarayıcı cache’lemez. Değiştirmek kolaydır.
  • 308 (Kalıcı, Method Korunur): 301’e benzer ama POST isteklerinde method kaybolmaz.
  • 307 (Geçici, Method Korunur): 302’ye benzer ama method korunur.

Pratik kural:

# İçerik kalıcı taşındıysa
Eylem: 301 Permanent Redirect

# Test ediyorsan veya geçici ise
Eylem: 302 Temporary Redirect

# API endpoint'leri için (form submission vb.)
Eylem: 307 veya 308

Page Rules ile Cloudflare Workers Farkı

Page Rules’un sınırlamalarına takıldığında Workers’a geçme zamanı gelmiştir. Şunu iyi anlamak gerekiyor:

Page Rules yapabilir:

  • URL eşleştirme ve yönlendirme
  • Cache davranışı değiştirme
  • Güvenlik seviyesi ayarlama
  • SSL ayarları değiştirme
  • Belirli Cloudflare özelliklerini açma/kapama

Page Rules yapamaz:

  • İstek header’larını okuma veya değiştirme
  • Cookie bazlı yönlendirme
  • Karmaşık koşullu mantık (if/else zincirleri)
  • Response body değiştirme
  • Gerçek geo-yönlendirme

Örneğin kullanıcının oturum durumuna göre yönlendirme yapmak istiyorsan:

// Cloudflare Workers ile (Page Rules'un yapamayacağı)
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const cookie = request.headers.get('Cookie')
  
  if (cookie && cookie.includes('session_token')) {
    return Response.redirect('https://example.com/dashboard', 302)
  }
  
  return Response.redirect('https://example.com/giris', 302)
}

Bu düzeyde bir mantık gerekiyorsa Workers kullan, Page Rules yetmez.

Yaygın Hatalar ve Çözümleri

Redirect Loop Problemi

# YANLIŞ: Sonsuz döngü oluşturur
URL Kalıbı: example.com/*
Hedef: https://example.com/$1
# HTTP -> HTTPS ama Cloudflare SSL modunu kontrol etmedin

# DOĞRU: SSL modunun "Full" veya "Full Strict" olduğundan emin ol
# Sonra kuralı ekle

Joker Karakteri Hatalı Kullanımı

# YANLIŞ: Çok geniş eşleşme
URL Kalıbı: *example.com*
# Bu "notexample.com" veya "fakeexample.com.malicious.com" ile de eşleşir

# DOĞRU: Daha spesifik ol
URL Kalıbı: example.com/*
# veya
URL Kalıbı: *.example.com/*

Cache Bypass Unutma

# E-ticaret sitesinde sepet sayfasını cache'lememek kritik
URL Kalıbı: example.com/sepet*
Ayar: Cache Level = Bypass

# Ödeme sayfası kesinlikle cache dışı olmalı
URL Kalıbı: example.com/odeme*
Ayar 1: Cache Level = Bypass
Ayar 2: Security Level = High

Toplu Yönlendirme Senaryosu: Site Migrasyonu

Büyük bir site migrasyonunda yüzlerce URL’i yönlendirmen gerekiyor. Page Rules sayısı sınırlı olduğundan akıllı kalıplar kullanman şart.

Önce URL yapılarını analiz et:

# access.log'dan eski URL'leri çek
cat /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -50

# Hangi path prefix'leri en çok kullanılıyor?
cat /var/log/nginx/access.log | awk '{print $7}' | cut -d'/' -f2 | sort | uniq -c | sort -rn

Bu analiz sonucunda URL’lerin %80’inin birkaç ana kategoriye girdiğini göreceksin. O kategoriler için wildcard kuralları yaz:

# Eski /haberler/ -> yeni /blog/
URL Kalıbı: eski-site.com/haberler/*
Hedef: https://yeni-site.com/blog/$1

# Eski /urunler/ -> yeni /shop/
URL Kalıbı: eski-site.com/urunler/*
Hedef: https://yeni-site.com/shop/$1

# Eski /hakkimizda -> yeni /hakkinda
URL Kalıbı: eski-site.com/hakkimizda*
Hedef: https://yeni-site.com/hakkinda$1

# Geri kalanları ana sayfaya gönder
URL Kalıbı: eski-site.com/*
Hedef: https://yeni-site.com/

Bu yaklaşımla 4 kuralla yüzlerce URL’i çözdün.

Page Rules’u Test Etme

Canlıya almadan önce kuralları test etmek şart:

# curl ile redirect zincirini gör
curl -I -L http://www.example.com/test-sayfasi

# Verbose çıktıyla tüm adımları takip et
curl -v -L http://www.example.com/urunler/test-urun 2>&1 | grep -E "Location|HTTP/"

# Redirect olmadan sadece header gör
curl -I --max-redirs 0 http://example.com/eski-yol/
# Cloudflare'in gerçekten devrede olup olmadığını kontrol et
curl -I https://example.com | grep -i "cf-ray|server"

# Cache durumunu kontrol et
curl -I https://example.com/static/style.css | grep -i "cf-cache-status"

Cloudflare’in kendi Page Rules Tester aracını da kullanabilirsin. Dashboard’da Rules > Page Rules > Test URL bölümünden hangi kuralın tetiklendiğini görebilirsin.

Performans İpuçları

Page Rules sırasına göre işlenir ve her istek için tüm liste taranır. Bunu optimize etmek için:

  • En sık eşleşen kuralları listenin üstüne koy
  • Birbirini dışlayan kuralları grupla
  • Mümkünse birden fazla ayarı tek bir kurala sığdır
# Tek kuralla birden fazla ayar yap
URL Kalıbı: example.com/wp-admin/*
Ayar 1: Security Level = High
Ayar 2: Cache Level = Bypass  
Ayar 3: Disable Performance
Ayar 4: SSL = Full Strict

# Bu 4 ayrı kural yerine tek kuralla halledildi

Sonuç

Cloudflare Page Rules, doğru kullanıldığında operasyonel hayatını ciddi ölçüde kolaylaştıran bir araç. Sunucuna ulaşmadan yüzlerce yönlendirmeyi çözmek, cache politikalarını granüler düzeyde kontrol etmek ve güvenlik kurallarını merkezi bir noktadan yönetmek için güçlü bir altyapı sunuyor.

Ücretsiz planda 3 kural sınırı sıkıcı görünse de akıllı wildcard kullanımıyla bu kısıtı büyük ölçüde aşabilirsin. Kritik nokta: kurallarını yazarken önce URL kalıplarını analiz et, en geniş kapsamlı ama en spesifik kalıpları bul ve önceliklendirmeyi asla gözardı etme.

Daha karmaşık senaryolar için Cloudflare Workers’a geçmekten çekinme. Page Rules’un sınırını anlamak da en az kullanmayı bilmek kadar değerli. Her iki aracın ne zaman kullanılacağını bilen sysadmin, altyapısını hem daha güvenli hem de daha performanslı hale getirir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir