# Yönlendirme Kurma

https://dev.wisecp.com/tr/yonlendirme-kurma

Alan adına geleni başka bir yere taşıyan altı uç: posta ve adres yönlendirmesi.

## Genel Bakış

Yönlendirme, alan adına geleni **başka bir yere taşımaktır**. İki türü vardır ve ikisi de aynı ek hizmetin arkasındadır: gelen postayı taşıyan e-posta yönlendirmesi ve gelen ziyaretçiyi taşıyan adres yönlendirmesi.

İkisi arasında bir sayı farkı vardır: e-posta yönlendirmesi **bir liste**dir, her yerel kısım için ayrı kural konur. Adres yönlendirmesi ise alan adı başına **tektir**.

Yönlendirme bir barındırma değildir. Ne posta saklanır ne de bir sayfa sunulur; yalnız gelen istek başka bir adrese devredilir.

## Referans

### E-posta Yönlendirmelerini Listeleme

get/api/v1/client/domains/{domain}/email-forwards

`Domains/GetEmailForwards` ek hizmet gerekir

Alan adında tanımlı e-posta yönlendirmelerini döndürür.

Dönen alanlar data[] — 4

identitystringSağlayıcı tarafındaki kayıt numarası. Sağlayıcı vermezse kaynak ve hedeften kararlı bir değer türetilir.

prefixstringAlan adındaki yerel kısım. İşaretin solundadır.

sourcestringTam kaynak adres. Her zaman yerel kısım ile alan adının birleşimidir.

targetstringPostanın gideceği kutu.

Hatalar 5

not_found404Alan adı bulunamadı, size ait değil ya da erişimi kısıtlanmış.

addon_required422Yönlendirme ek hizmeti alınmamış. Ödenmemiş fatura ve uzantının bu hizmeti sunmaması da aynı kapıya düşer.

addon_pending422Ek hizmet faturası ödenmemiş. Fatura numarası yanıtın ayrıntısında gelir.

email_forwarding_not_supported422Sağlayıcı modülünde e-posta yönlendirme yok.

email_forwarding_failed422Sağlayıcı canlı okumayı reddetti.

email_forwarding_failed500Sağlayıcıya ulaşılamadı, yanıt gelmedi ya da işlem gerekçe bildirilmeden düştü. Daha sonra yeniden deneyin.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/client/domains/example.com/email-forwards' \
  -H "Authorization: Bearer $CLIENT_KEY"
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/client/domains/${domain}/email-forwards`, {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const body = await res.json();
if (res.status === 422 && body.error.code.startsWith('addon_')) return offerAddon(body);
if (!res.ok) throw new Error(body.error.message); // email_forwarding_failed: 422 = saglayici reddetti, 500 = ulasilamadi (sonra yeniden deneyin)

const { data } = body;
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/client/domains/' . $domain . '/email-forwards');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Yonlendirme POSTA KUTUSU DEGILDIR: gelen posta baska bir adrese gecer, burada saklanmaz.
$rows = Kernel::internal('client:Domains/GetEmailForwards',
    ['owner_id' => $uid, 'domain' => $domain])['data'];
```

### E-posta Yönlendirmesi Ekleme

post/api/v1/client/domains/{domain}/email-forwards

`Domains/CreateEmailForward` ek hizmet gerekir

Alan adına gelen postayı başka bir kutuya taşıyan bir kural ekler.

Gövde 2

prefixstringreqAlan adındaki yerel kısım. Yönlendirme bu kısım ile alan adının birleşimine yanıt verir.

targetstringreqHedef posta kutusu. Geçerli bir e-posta adresi olmalıdır.

Dönen alanlar data[] — 4

dataarrayEkleme sonrası yeniden okunan liste. Listeleme ucuyla aynı şekildedir.

Hatalar 8

not_found404Alan adı bulunamadı, size ait değil ya da erişimi kısıtlanmış.

addon_required422Yönlendirme ek hizmeti alınmamış. Ödenmemiş fatura ve uzantının bu hizmeti sunmaması da aynı kapıya düşer.

not_actionable422Alan adı etkin değil.

email_forward_fields422Yerel kısım ya da hedef eksik.

email_forward_target_invalid422Hedef geçerli bir e-posta adresi değil.

email_forwarding_not_supported422Sağlayıcı modülünde bu destek yok.

email_forward_rejected422Bir kanca değişikliği reddetti.

email_forwarding_failed422Sağlayıcı kuralı reddetti.

email_forwarding_failed500Sağlayıcıya ulaşılamadı, yanıt gelmedi ya da işlem gerekçe bildirilmeden düştü. Daha sonra yeniden deneyin.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/client/domains/example.com/email-forwards' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"prefix":"sales","target":"team@example.net"}'
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/client/domains/${domain}/email-forwards`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ prefix, target }),
});

const { data } = await res.json();
renderForwards(data);
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/client/domains/' . $domain . '/email-forwards');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(compact('prefix', 'target')),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Yalniz YEREL KISIM gonderin: tam adres yazmak alan adini iki kez ekleyip kurali bozar.
Kernel::internal('client:Domains/CreateEmailForward',
    ['owner_id' => $uid, 'domain' => $domain, 'prefix' => 'sales', 'target' => $box]);
```

### E-posta Yönlendirmesini Silme

delete/api/v1/client/domains/{domain}/email-forwards

`Domains/DeleteEmailForward` eşleşme daraltılır

Bir e-posta yönlendirme kuralını kaldırır.

Gövde 3

prefixstringreqKaldırılacak kuralın yerel kısmı.

targetstringHedef. Kaynakla hedefi birlikte kullanan sağlayıcılarda gönderilir.

identitystringListeden gelen kayıt numarası. Elinizdeyken gönderin.

Dönen alanlar data[] — 4

dataarraySilme sonrası yeniden okunan liste.

Hatalar 6

not_found404Alan adı bulunamadı, size ait değil ya da erişimi kısıtlanmış.

addon_required422Yönlendirme ek hizmeti alınmamış. Ödenmemiş fatura ve uzantının bu hizmeti sunmaması da aynı kapıya düşer.

not_actionable422Alan adı etkin değil.

email_forward_fields422Yerel kısım gönderilmemiş.

email_forwarding_not_supported422Sağlayıcı modülünde bu destek yok.

email_forwarding_failed422Sağlayıcı silmeyi reddetti.

email_forwarding_failed500Sağlayıcıya ulaşılamadı, yanıt gelmedi ya da işlem gerekçe bildirilmeden düştü. Daha sonra yeniden deneyin.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X DELETE 'https://panel.ornek.com/api/v1/client/domains/example.com/email-forwards' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"prefix":"sales","target":"team@example.net"}'
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/client/domains/${domain}/email-forwards`, {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ prefix: f.prefix, target: f.target, identity: f.identity }),
});

const { data } = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/client/domains/' . $domain . '/email-forwards');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($selector),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Ayni yerel kisim BIRDEN COK hedefe gidebilir: hedefi de gonderin, yoksa hepsi silinebilir.
Kernel::internal('client:Domains/DeleteEmailForward', ['owner_id' => $uid, 'domain' => $domain,
    'prefix' => $f['prefix'], 'target' => $f['target'], 'identity' => $f['identity']]);
```

### Adres Yönlendirmesini Okuma

get/api/v1/client/domains/{domain}/forwarding

`Domains/GetUrlForwarding` ek hizmet gerekir

Alan adının başka bir adrese yönlendirilip yönlendirilmediğini döndürür.

Dönen alanlar data — 5

activeboolKurulu bir yönlendirme var mı.

protocolstringHedefin şeması.

methodintYönlendirme türü. Kalıcı ya da geçici.

domainstringŞemasız hedef. Kurulu değilse boş gelir.

urlstringTam hedef adres.

Hatalar 5

not_found404Alan adı bulunamadı, size ait değil ya da erişimi kısıtlanmış.

addon_required422Yönlendirme ek hizmeti alınmamış. Ödenmemiş fatura ve uzantının bu hizmeti sunmaması da aynı kapıya düşer.

addon_pending422Ek hizmet faturası ödenmemiş.

url_forwarding_not_supported422Sağlayıcı modülünde adres yönlendirme yok.

url_forwarding_failed422Sağlayıcı canlı okumayı reddetti.

url_forwarding_failed500Sağlayıcıya ulaşılamadı, yanıt gelmedi ya da işlem gerekçe bildirilmeden düştü. Daha sonra yeniden deneyin.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/client/domains/example.com/forwarding' \
  -H "Authorization: Bearer $CLIENT_KEY"
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/client/domains/${domain}/forwarding`, {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
if (data.active) showTarget(data.url, data.method);
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/client/domains/' . $domain . '/forwarding');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Alan adi basina TEK yonlendirme vardir: yeni kurmak eskisini ezer, liste diye bir sey yoktur.
$f = Kernel::internal('client:Domains/GetUrlForwarding',
    ['owner_id' => $uid, 'domain' => $domain])['data'];
```

### Adres Yönlendirmesi Kurma

put/api/v1/client/domains/{domain}/forwarding

`Domains/UpdateUrlForwarding` ek hizmet gerekir

Alan adına gelen ziyaretçiyi başka bir adrese gönderir.

Gövde 2

urlstringreqTam hedef adres. Şeması yönlendirmenin şeması olur; yazılmazsa güvensiz şema kullanılır.

methodintYönlendirme türü. Kalıcı olan varsayılandır; başka bir değer ona düşer.

Dönen alanlar data — 5

dataobjectGüncel yönlendirme. Okuma ucuyla aynı şekildedir.

Hatalar 7

not_found404Alan adı bulunamadı, size ait değil ya da erişimi kısıtlanmış.

addon_required422Yönlendirme ek hizmeti alınmamış. Ödenmemiş fatura ve uzantının bu hizmeti sunmaması da aynı kapıya düşer.

not_actionable422Alan adı etkin değil.

url_required422Hedef gönderilmemiş ya da şema ayrıldıktan sonra boş kalıyor.

url_forwarding_not_supported422Sağlayıcı modülünde bu destek yok.

url_forwarding_rejected422Bir kanca değişikliği reddetti.

url_forwarding_failed422Sağlayıcı değişikliği reddetti.

url_forwarding_failed500Sağlayıcıya ulaşılamadı, yanıt gelmedi ya da işlem gerekçe bildirilmeden düştü. Daha sonra yeniden deneyin.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X PUT 'https://panel.ornek.com/api/v1/client/domains/example.com/forwarding' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"url":"https://shop.example.net/welcome","method":301}'
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/client/domains/${domain}/forwarding`, {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ url, method: 302 }),
});

const { data } = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/client/domains/' . $domain . '/forwarding');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['url' => $target, 'method' => 301]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// KALICI yonlendirmeyi tarayicilar ONBELLEKLER: denemelerde gecici turu secin, sonra kaliciya gecin.
Kernel::internal('client:Domains/UpdateUrlForwarding',
    ['owner_id' => $uid, 'domain' => $domain, 'url' => $target, 'method' => 302]);
```

### Adres Yönlendirmesini Kaldırma

delete/api/v1/client/domains/{domain}/forwarding

`Domains/DeleteUrlForwarding` ek hizmet gerekir

Alan adının adres yönlendirmesini kaldırır.

Dönen alanlar data — 5

dataobjectKaldırma sonrası okunan durum. Okuma ucuyla aynı şekildedir.

Hatalar 6

not_found404Alan adı bulunamadı, size ait değil ya da erişimi kısıtlanmış.

addon_required422Yönlendirme ek hizmeti alınmamış. Ödenmemiş fatura ve uzantının bu hizmeti sunmaması da aynı kapıya düşer.

not_actionable422Alan adı etkin değil.

url_forwarding_not_supported422Sağlayıcı modülünde bu destek yok.

url_forwarding_rejected422Bir kanca kaldırmayı reddetti.

url_forwarding_failed422Sağlayıcı kaldırmayı reddetti.

url_forwarding_failed500Sağlayıcıya ulaşılamadı, yanıt gelmedi ya da işlem gerekçe bildirilmeden düştü. Daha sonra yeniden deneyin.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X DELETE 'https://panel.ornek.com/api/v1/client/domains/example.com/forwarding' \
  -H "Authorization: Bearer $CLIENT_KEY"
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/client/domains/${domain}/forwarding`, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/client/domains/' . $domain . '/forwarding');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Yonlendirmeyi kaldirmak alan adini BOSA dusurur: ziyaretci artik hicbir yere gitmez.
// Yerine ne konacagini once dusunun; bir kayit ya da yeni bir hedef gerekir.
Kernel::internal('client:Domains/DeleteUrlForwarding',
    ['owner_id' => $uid, 'domain' => $domain]);
```

## Tuzaklar

> **İki tür de aynı ek hizmete bağlıdır**
> 
> E-posta ve adres yönlendirmesinin **altı ucu birden** yönlendirme ek hizmetinin arkasındadır. Alınmamışsa ya da faturası ödenmemişse hepsi reddedilir ve yanıt hangi durumda olduğunu söyler. Tek bir satın alma ikisini birden açar.

> **Alan adı başına tek adres yönlendirmesi**
> 
> Adres yönlendirmesinin listesi yoktur: kurma çağrısı var olanın **üzerine yazar**. İkinci bir hedef eklemek diye bir şey yoktur; ikinci çağrı ilkini siler. E-posta yönlendirmesi ise bir listedir ve istediğiniz kadar kural taşır.

> **Yerel kısım gönderilir, tam adres değil**
> 
> E-posta yönlendirmesinde kaynak alanı yalnız **yerel kısmı** alır; alan adını sunucu ekler. Tam adres yazmak alan adının iki kez eklenmesine yol açar ve kural hiçbir postaya yanıt vermez. Yanıttaki kaynak alanı doğru birleşimi gösterir.

> **Hedefsiz silme birden çok kuralı götürebilir**
> 
> Aynı yerel kısım birden çok hedefe yönlendirilebilir. Silme çağrısında yalnız yerel kısmı göndermek, o kısma bağlı **bütün kuralları** kaldırabilir. Hedefi ve elinizde varsa kayıt numarasını da ekleyin.

> **Kalıcı yönlendirme tarayıcıda saklanır**
> 
> Kalıcı türü seçmek tarayıcılara ve arama motorlarına adresin **kalıcı olarak taşındığını** söyler; onlar da bunu uzun süre saklar. Yanlış bir hedefle kalıcı yönlendirme kurmak, düzelttikten sonra bile ziyaretçileri bir süre eski hedefe götürür. Denemelerde geçici türü kullanın.

> **Yönlendirme posta kutusu değildir**
> 
> E-posta yönlendirmesi gelen postayı **başka bir kutuya geçirir** ve hiçbir kopya saklamaz. Hedef kutu dolmuşsa ya da postayı reddediyorsa mesaj kaybolur ve burada bir iz kalmaz. Gerçek bir kutu isteyen müşteri bir posta hizmeti almalıdır.

## İlgili Makaleler

- [Ad Sunucuları ve Kayıtlar](https://dev.wisecp.com/tr/ad-sunuculari-ve-kayitlar)
- [Sahip Olunan Alan Adları](https://dev.wisecp.com/tr/sahip-olunan-alan-adlari)
