# E-posta ve URL Yönlendirme

https://dev.wisecp.com/tr/eposta-ve-url-yonlendirme

Alan adına gelen postayı ve ziyaretçiyi başka bir adrese gönderen yedi uç.

## Genel Bakış

Bu yedi uç alan adına gelenlerin **nereye gideceğini** belirler. İkisi ayrı iştir: e-posta yönlendirmesi **postayı**, URL yönlendirmesi **ziyaretçiyi** başka bir yere gönderir.

E-posta yönlendirmesinde posta kutusu açılmaz; gelen posta olduğu gibi başka bir adrese iletilir. URL yönlendirmesi ise alan adında bir site barındırmadan onu başka bir adrese bağlar.

## Referans

### E-posta Yönlendirmelerini Listeleme

get/api/v1/admin/services/{id}/domain/email-forwards

`Services/GetDomainEmailForwards` admin

Alan adına gelen postanın nereye iletildiğini gösteren kayıtları döndürür.

Dönen alanlar data[] — 4

identitystringKaydın kimliği. Modül vermezse ön ek ve hedeften türetilir; yani hedefi değişen kaydın kimliği de değişir.

prefixstringKaynak adresin yerel kısmı.

sourcestringTam kaynak adres. Ön ek ile alan adından hesaplanır.

targetstringPostanın iletileceği adres.

Hatalar 6

not_found404Hizmet bulunamadı.

not_domain422Hizmet bir alan adı değil.

no_module422Tescil modülü bağlı değil.

not_supported422Modül bu işlemi desteklemiyor.

module_error422Tescil kuruluşu isteği reddetti; mesaj gerekçesini taşır.

module_failed500Tescil kuruluşuna ulaşılamadı ya da işlem gerekçesiz başarısız oldu.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl 'https://panel.ornek.com/api/v1/admin/services/520/domain/email-forwards' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/services/520/domain/email-forwards', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

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

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

```php
// 'source' hesaplanmis bir alandir; yazarken degil YALNIZ okurken bulunur.
$forwards = Api::Services()->GetDomainEmailForwards(['id' => 520])['data'];
```

Yanıt 200

```json
{
  "data": [
    {
      "identity": "3001",
      "prefix": "info",
      "source": "info@example.com",
      "target": "john@example.com"
    }
  ]
}
```

### E-posta Yönlendirmesi Ekleme

post/api/v1/admin/services/{id}/domain/email-forwards

`Services/AddDomainEmailForward` admin 201

Alan adının bir adresine gelen postayı başka bir adrese iletir.

Gövde 2

prefixstringzorunluKaynak adresin yerel kısmı. Alan adı kendiliğinden eklenir.

targetstringzorunluPostanın iletileceği adres. Biçimi doğrulanır.

Dönen alanlar data — 2

prefixstringEklenen yönlendirmenin kaynak ön eki.

targetstringYönlendirmenin güncel hedefi.

Hatalar 7

not_found404Hizmet bulunamadı.

not_domain422Hizmet bir alan adı değil.

no_module422Tescil modülü bağlı değil.

not_supported422Modül bu işlemi desteklemiyor.

email_fwd_fields_required422Zorunlu alanlardan biri boş.

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

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl -X POST 'https://panel.ornek.com/api/v1/admin/services/520/domain/email-forwards' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"prefix":"info","target":"john@example.com"}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/520/domain/email-forwards', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ prefix: 'info', target: 'john@example.com' }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/520/domain/email-forwards');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'prefix' => 'info',
        'target' => 'john@example.com',
    ]),
]);

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

```php
// On ek YALNIZ yerel kisimdir: tam adres gondermek 'info@example.com@example.com' uretir.
Api::Services()->AddDomainEmailForward([
    'id'     => 520,
    'prefix' => 'info',
    'target' => 'john@example.com',
]);
```

### E-posta Yönlendirmesini Güncelleme

put/api/v1/admin/services/{id}/domain/email-forwards

`Services/UpdateDomainEmailForward` admin yalnız hedef değişir

Bir yönlendirmenin hedefini değiştirir. Kaynak ön eki değiştirilemez.

Gövde 4

prefixstringzorunluDeğiştirilecek kaydın kaynak ön eki.

target_newstringzorunluYeni hedef adres.

targetstringMevcut hedef. Aynı ön ekte birden çok kayıt varsa ayırt eder.

identitystringListeden gelen kayıt kimliği.

Dönen alanlar data — 2

prefixstringDeğişen kaydın kaynak ön eki.

targetstringYönlendirmenin güncel hedefi. `target_new` olarak gönderdiğiniz değerdir.

Hatalar 7

not_found404Hizmet bulunamadı.

not_domain422Hizmet bir alan adı değil.

no_module422Tescil modülü bağlı değil.

not_supported422Modül bu işlemi desteklemiyor.

email_fwd_fields_required422Zorunlu alanlardan biri boş.

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

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl -X PUT 'https://panel.ornek.com/api/v1/admin/services/520/domain/email-forwards' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"prefix":"info","target":"john@example.com","target_new":"jane@example.com"}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/520/domain/email-forwards', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    prefix: 'info',
    target: 'john@example.com',
    target_new: 'jane@example.com',
  }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/520/domain/email-forwards');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'prefix'     => 'info',
        'target'     => 'john@example.com',
        'target_new' => 'jane@example.com',
    ]),
]);

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

```php
// Ön eki degistirmek icin bu uc yoktur: eskisini silip yenisini eklersiniz.
Api::Services()->DeleteDomainEmailForward(['id' => 520, 'prefix' => 'info']);

Api::Services()->AddDomainEmailForward([
    'id'     => 520,
    'prefix' => 'contact',
    'target' => 'jane@example.com',
]);
```

### E-posta Yönlendirmesini Silme

delete/api/v1/admin/services/{id}/domain/email-forwards

`Services/DeleteDomainEmailForward` admin

Bir e-posta yönlendirmesini kaldırır.

Gövde 3

prefixstringzorunluSilinecek kaydın kaynak ön eki.

targetstringHedef. Eşleşmeyi daraltır.

identitystringListeden gelen kayıt kimliği.

Dönen alanlar data — 2

deletedboolSilme başarılı mı.

prefixstringSilinen kaydın ön eki.

Hatalar 6

not_found404Hizmet bulunamadı.

not_domain422Hizmet bir alan adı değil.

no_module422Tescil modülü bağlı değil.

not_supported422Modül bu işlemi desteklemiyor.

email_fwd_fields_required422Zorunlu alanlardan biri boş.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/services/520/domain/email-forwards' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"prefix":"info"}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/520/domain/email-forwards', {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ prefix: 'info' }),
});

const body = await res.json();
```

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

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

```php
// Ayni on ekte birden cok hedef varsa yalniz on ek gondermek HEPSINI silebilir.
Api::Services()->DeleteDomainEmailForward([
    'id'     => 520,
    'prefix' => 'info',
    'target' => 'john@example.com',
]);
```

### URL Yönlendirmesini Okuma

get/api/v1/admin/services/{id}/domain/forwarding

`Services/GetDomainForwarding` admin

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

Dönen alanlar data — 4

activeboolYönlendirme çalışıyor mu.

methodintYönlendirme tipi. Kalıcı ya da geçici; varsayılan kalıcı.

protocolstringHedefe hangi protokolle gidileceği.

domainstringYönlendirilecek adres.

Hatalar 6

not_found404Hizmet bulunamadı.

not_domain422Hizmet bir alan adı değil.

no_module422Tescil modülü bağlı değil.

not_supported422Modül bu işlemi desteklemiyor.

module_error422Tescil kuruluşu isteği reddetti; mesaj gerekçesini taşır.

module_failed500Tescil kuruluşuna ulaşılamadı ya da işlem gerekçesiz başarısız oldu.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl 'https://panel.ornek.com/api/v1/admin/services/520/domain/forwarding' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/services/520/domain/forwarding', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

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

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

```php
$response = Api::Services()->GetDomainForwarding(['id' => 520]);
```

### URL Yönlendirmesini Ayarlama

put/api/v1/admin/services/{id}/domain/forwarding

`Services/SetDomainForwarding` admin siteyi kapatır

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

Gövde 3

domainstringzorunluYönlendirilecek adres.

protocolstringHedefe hangi protokolle gidileceği. Varsayılan şifresiz.

methodintYönlendirme tipi. Varsayılan kalıcı; kalıcı yönlendirme tarayıcılarda önbelleğe alınır.

Dönen alanlar data — 4

activeboolYönlendirme çalışıyor mu.

methodintYönlendirme tipi. Kalıcı ya da geçici; varsayılan kalıcı.

protocolstringHedefe hangi protokolle gidileceği.

domainstringYönlendirilecek adres.

Hatalar 6

not_found404Hizmet bulunamadı.

not_domain422Hizmet bir alan adı değil.

no_module422Tescil modülü bağlı değil.

not_supported422Modül bu işlemi desteklemiyor.

domain_fwd_url_required422Hedef adres boş.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl -X PUT 'https://panel.ornek.com/api/v1/admin/services/520/domain/forwarding' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"domain":"example.net","protocol":"https","method":301}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/520/domain/forwarding', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    domain: 'example.net',
    protocol: 'https',
    method: 301,
  }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/520/domain/forwarding');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'domain'   => 'example.net',
        'protocol' => 'https',
        'method'   => 301,
    ]),
]);

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

```php
// Kalici yonlendirme tarayicilarda onbellege alinir: gecici deneme yapiyorsaniz 302 secin.
Api::Services()->SetDomainForwarding([
    'id'       => 520,
    'domain'   => 'example.net',
    'protocol' => 'https',
    'method'   => 302,
]);
```

### URL Yönlendirmesini Kaldırma

delete/api/v1/admin/services/{id}/domain/forwarding

`Services/CancelDomainForwarding` admin

Yönlendirmeyi kaldırır ve alan adını kendi ad sunucularına bırakır.

Dönen alanlar data — 1

cancelledboolYönlendirme kaldırıldı mı.

Hatalar 6

not_found404Hizmet bulunamadı.

not_domain422Hizmet bir alan adı değil.

no_module422Tescil modülü bağlı değil.

not_supported422Modül bu işlemi desteklemiyor.

module_error422Tescil kuruluşu isteği reddetti; mesaj gerekçesini taşır.

module_failed500Tescil kuruluşuna ulaşılamadı ya da işlem gerekçesiz başarısız oldu.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/services/520/domain/forwarding' \
  -H "Authorization: Bearer $API_KEY"
```

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

const body = await res.json();
```

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

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

```php
// Yonlendirmeyi kaldirmak alan adini ad sunucularina birakir; DNS kaydi yoksa site acilmaz.
Api::Services()->CancelDomainForwarding(['id' => 520]);

$records = Api::Services()->GetDnsRecords(['id' => 520])['data'];
```

## Tuzaklar

> **Ön ek yalnız yerel kısımdır**
> 
> Kaynak adresi alan adıyla birlikte göndermeyin: uç ön eke alan adını kendisi ekler. Tam adres gönderirseniz iki kez eklenmiş bir kaynak oluşur ve yönlendirme hiçbir zaman eşleşmez. Okurken gördüğünüz tam adres hesaplanmış bir alandır; yazarken kullanılmaz.

> **Yalnız ön ek göndermek hepsini silebilir**
> 
> Silme ucunda yalnız ön ek zorunludur. Aynı ön ekte birden çok hedef varsa hedefi ya da kimliği vermeden gönderilen istek **hepsini** kaldırabilir, çünkü eşleşmeyi modül yapar. Tek bir kaydı silecekseniz hedefi de gönderin.

> **Ön ek güncellenemez**
> 
> Güncelleme ucu yalnız hedefi değiştirir. Kaynak adresi değiştirmek için kaydı silip yenisini eklemeniz gerekir; arada gelen posta hiçbir yere iletilmez.

> **Kalıcı yönlendirme tarayıcıda kalır**
> 
> Varsayılan yönlendirme tipi kalıcıdır ve tarayıcılar bunu önbelleğe alır. Yanlış bir hedefe kalıcı yönlendirme koyup sonra düzeltirseniz, daha önce ziyaret etmiş kullanıcılar bir süre eski hedefe gitmeye devam eder. Denerken geçici tipi seçin.

> **Yönlendirmeyi kaldırmak siteyi geri getirmez**
> 
> Yönlendirme kaldırıldığında alan adı kendi ad sunucularına döner. O sunucularda bir kayıt yoksa alan adı hiçbir yere çıkmaz: önceden yönlendirme kullanıldığı için DNS kaydı hiç yazılmamış olabilir. Kaldırmadan önce kayıtlara bakın.

## İlgili Makaleler

- [DNS Yönetimi](https://dev.wisecp.com/tr/dns-yonetimi)
- [Alan Adı Temelleri](https://dev.wisecp.com/tr/alan-adi-temelleri)
