URL takma adları ve yol desenleri
Bir içeriğin gerçek adresi onun slug'ıdır ve asla değişmez. /blog/2026/merhaba-dunya gibi okunaklı, kategori ya da tarih içeren adresler ise takma ad (alias) olarak üretilir. Bu ayrım bilinçlidir: takma ad bir yönlendirme katmanıdır, içeriğin kimliği değil.
Bileşenler
| Parça | Görevi |
|---|---|
UrlAlias kaydı |
Bir yolu (ve dili) bir içeriğe bağlar |
PathAliasPattern |
Bir içerik türü için yol deseni (/blog/[node:created:Y]/[node:title]) |
PathAliasGenerator |
Deseni içeriğe uygular, benzersiz bir yol bulur, takma adı yazar |
UrlAliasListener |
Hiçbir rota eşleşmeyen isteği takma ad tablosunda arar ve kanonik adrese 301 verir |
Desenler Yapı → Yol desenleri ekranından yönetilir. Her desen bir içerik türüne (bundle) bağlıdır, açılıp kapatılabilir ve yapılandırma dosyası olarak dışa aktarılır:
# cp-content/config/sync/path_pattern.post.yaml
pattern: '/blog/[node:created:Y]/[node:title]'
enabled: true
Bir yol nasıl üretilir
- Desen, token değiştirici ile çözülür:
[node:title],[node:created:Y],[node:category],[node:author]… - Çıkan metin
/ile bölünür ve her parça ayrı ayrı URL biçimine çevrilir (küçük harf, Türkçe karakterler ASCII'ye). "Merhaba Dünya!" →merhaba-dunya; sabit parçalar (blog) olduğu gibi kalır. - Boş kalan parçalar atılır. Kategorisi olmayan bir içerikte
[node:category]çift eğik çizgi bırakmaz, sessizce kaybolur. - Yol o dilde zaten başka bir içerikte varsa sona
-2,-3eklenir. - Aynı içerik için aynı yol zaten kayıtlıysa hiçbir şey yazılmaz: işlem idempotenttir.
Eski adresler neden 404 vermez
Başlığı değiştirdiğinizde yeni bir takma ad üretilir, eskisi silinmez. Her takma ad, istek anında içeriğin güncel slug'ına çözülür. Sonuç: eski adres sonsuza dek yeni adrese 301 yönlendirir; Drupal'in Pathauto'sundaki "alias değişti, eski adres 404" tuzağı için ayrı bir yönlendirme modülü gerekmez.
UrlAliasListener, kernel.exception olayını dinler, yani yalnızca hiçbir rotanın eşleşmediği (404 olacak) isteklerde devreye girer. Modüllerin kendi rotaları (/forum, /docs) takma adlarla gölgelenemez.
Mevcut içerik için toplu üretim
Desen eklemek eski içeriği otomatik güzelleştirmez. Yol desenleri ekranındaki yeniden üret düğmesi, desenin türündeki tüm içerik için takma ad üretir. Zorunlu değildir: eski bağlantılar zaten slug ile çalışmaya devam eder, bu yalnızca kolaylıktır.
Modülünüz için
- İçerik türünüz bir
Nodeise desen sistemine otomatik dahil olur; ayrı kod gerekmez. - Kendi token türünüzü eklemek için
TokenValueProviderInterfaceuygulayıpcp.token_value_provideretiketiyle bağlayın (Genişletme noktaları). - Kendi rotalarınız için takma ad kullanmayın;
#[Route]zaten kesindir.
Sık hatalar
- Desenin sonuna slug yazmak: slug zaten başlıktan gelir;
[node:title]yeterlidir. - Aynı yolu iki dilde beklemek: benzersizlik
(yol, dil)çiftinedir; farklı dillerde aynı yol olabilir. - Deseni silince adreslerin gideceğini sanmak: silinen desen yeni takma ad üretmeyi durdurur; var olanlar çalışmaya devam eder.