SEF Adresler

SEF (arama motoru dostu) adresler, index.php?do=cat&category=5 gibi adresleri /haberler/ekonomi/ biçimine çevirir. Arama motorları için önemlidir ve DLE'de tamamen PHP tarafında çözülür.

Açma / kapama

SEF adresler Sistem Ayarları içindeki bir onay kutusuyla denetlenir: allow_alt_url. Yanındaki birkaç ayar da konuyla ilgilidir:

AyarNe yapar?
allow_alt_urlSEF adresleri açar/kapatır
seo_typeHaber adreslerinin biçimi (aşağıda)
seo_controlAdres biçimi denetimi
translit_urlAdres üretilirken harf çevirisi yapılsın mı?
own_404Özel 404 sayfası kullan
i
seo_type değiştirirseniz adres kuralları güncellenir DLE, seo_type değiştiğinde adres kurallarını otomatik olarak yeniden üretir. Ayrıca SEF kapalıyken seo_type boşsa DLE onu 2 yapar — pano bazen "kendiliğinden değişti" izlenimi verir, sebebi budur.

Haber adresi biçimleri

seo_typeÖrnek adres
1/123-haber-basligi.html
2/kategori/alt-kategori/123-haber-basligi.html
3/2008/04/02/haber-basligi.html

Adresler nasıl üretilir?

Adres üretiminden DLEUrl sınıfı sorumludur (engine/classes/urls.class.php). Sınıf tamamen statiktir ve metodu şudur:

DLEUrl::BuildUrl($key, $params)
✕
İki yaygın yanlış bilgi
  • İlk parametre $key'dir, $type değil. İkinci parametre ise bir dizidir.
  • DLESEO sınıfı adres üretmez. engine/classes/seo.class.php yalnızca schema.org işaretlemesi, meta etiketleri ve IndexNow bildirimi ile ilgilenir. Adres işi tamamen DLEUrl'e aittir.

Gerçek kullanım örnekleri:

// Haber adresi
$full_link = DLEUrl::BuildUrl('showfull', array(
    'category'  => get_url($row['category']),
    'year'      => date('Y', $row['date']),
    'month'     => date('m', $row['date']),
    'day'       => date('d', $row['date']),
    'news_name' => $row['alt_name'],
    'newsid'    => $row['id'],
));

// Kategori adresi
$kategori = DLEUrl::BuildUrl('category', array('category' => get_url($cat_id)));

Desteklenen anahtarlar

BuildUrl'un kabul ettiği $key değerleri (her birinin .page varyantı da vardır):

showfull, showfull.print, main.page, date.day, date.month, date.year, category, static, static.print, tags, tags.all, xfsearch, user, user.news, user.rss, lastnews, catalog, newposts, favorites, rules, statistics, addnews, rss, rssdzen, rss.category

Yeniden yazma kuralları (.htaccess)

Çoğu sistemde her adres biçimi için ayrı bir RewriteRule yazılır. DLE böyle yapmaz: tüm adresler index.php'ye gönderilir ve SEF çözümü PHP içinde yapılır.

DirectoryIndex index.php

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Var olmayan dosya istekleri (php, jpg, css, woff2 …) → 404
    RewriteRule \.(php|jpg|...|woff2)(\?|$) - [L,NC,R=404]

    # Site haritaları özel yollardan servis edilir
    RewriteRule ^sitemap.xml$      uploads/sitemap.xml      [L]
    RewriteRule ^google_news.xml$  uploads/google_news.xml  [L]
    RewriteRule ^static_pages.xml$ uploads/static_pages.xml [L]
    RewriteRule ^category_pages.xml$ uploads/category_pages.xml [L]
    RewriteRule ^tags_pages.xml$   uploads/tags_pages.xml   [L]
    RewriteRule ^news_pages(\d*?).xml$ uploads/news_pages$1.xml [L]

    # Geri kalan her şey index.php'ye
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php [L]
</IfModule>
!
.htaccess dosyası şarttır Apache kullanıyorsanız ve SEF adresler 404 veriyorsa ilk bakılacak yer bu dosyadır: ya yoktur, ya mod_rewrite kapalıdır, ya da dosya AllowOverride None nedeniyle okunmuyordur. Nginx kullanıyorsanız aynı mantığı Nginx kurallarına çevirmeniz gerekir.

Yönlendirme PHP'de nasıl çalışır?

// engine/init.php
if ($config['allow_alt_url']) {
    DLEUrl::Route();
}

Route() metodu, adres kurallarını (FastRoute ile) eşleştirir. Üretilen rota tablosu engine/cache/system/route.rules.php dosyasında önbelleklenir; kurallar değişince yeniden üretilir.

Adres kurallarını yönetmek

Panelde SEF adres kuralları modülü (engine/inc/friendlyurl.php) bulunur. Yalnızca ana yönetici (grup 1) erişebilir.

YapabildiklerinizAçıklama
Kural listesini görüntülemeHer $key için SEF ve gerçek adres biçimi yan yana
SıralamaSürükle-bırak ile kural önceliği değiştirme
Düzenleme / ekleme / silmeKendi adres kalıbınızı tanımlama
Geri yüklemeVarsayılan kurallara dönme
DenetlemeKuralların çakışıp çakışmadığını test etme

Kurallar engine/data/rules.json dosyasında saklanır.

Adres (slug) üretimi ve tekillik

Haberin adres parçası (alt_name) haber ekleme ekranında ayrı bir alandır. Boş bırakılırsa başlıktan üretilir:

$alt_name = trim($_POST['alt_name'] ?? '');
if (!$alt_name) {
    $alt_name = totranslit(stripslashes($title), true, false, $config['translit_url']);
}
✕
Tekrarlanan adresler HATA verir — otomatik sonek eklenmez Aynı gün içinde aynı alt_name ile ikinci bir haber eklemeye çalışırsanız DLE hata verir ve kaydetmez. Bazı sistemlerde olduğu gibi -2, -3 soneki eklenmez. Aynı kural kategoriler için de geçerlidir.

Ayrılmış adres adları

Kategori veya sayfa adresi olarak şu adları kullanamazsınız — sistem tarafından ayrılmıştır:

tags, xfsearch, user, lastnews, catalog, newposts, favorites

SEF kapalıyken adresler

Ne?Adres
Haberindex.php?newsid=123 veya index.php?subaction=showfull&year=…&news_name=…
Kategoriindex.php?do=cat&category=ekonomi
Statik sayfaindex.php?do=static&page=hakkimizda
Etiketindex.php?do=tags&tag=spor

Sık karşılaşılan sorunlar

BelirtiSebep / çözüm
Tüm SEF adresler 404.htaccess yok veya mod_rewrite kapalı
Ana sayfa açılıyor, alt sayfalar açılmıyorAllowOverride kapalı; hosting panelinden açtırın
Adres değişti ama eski adres çalışmıyorYönlendirme kuralı ekleyin veya paneldeki yönlendirme modülünü kullanın
Kural değişikliği etki etmiyorRota önbelleğini temizleyin (engine/cache/system/)
"Bu adres kullanılıyor" hatasıAynı slug mevcut; farklı bir adres parçası yazın

Kontrol listesi

  • allow_alt_url açık ve seo_type bilinçli seçildi.
  • .htaccess sunucuda var ve mod_rewrite çalışıyor.
  • HTTPS geçişinde adresler karışmıyor (http/https tek biçim).
  • Eski adreslerden yenilerine yönlendirme tanımlı.
  • Sitemap adresleri (sitemap.xml) erişilebilir.
  • Ek alan araması ve etiket sayfaları da SEF biçiminde çalışıyor.

Sırada: Akıllı Telefon Desteği.