---
title: "Aplikasi pengalihan"
version: 6.1
locale: id
source: https://docs.djangoproject.com/id/6.1/ref/contrib/redirects/
canonical: https://djangodocs.dev/id/6.1/ref/contrib/redirects/
---
# Aplikasi pengalihan

Django comes with an optional redirects application. It lets you store
redirects in a database and handles the redirecting for you. It uses the HTTP
response status code `301 Moved Permanently` by default.

## Pemasangan

Untuk memasang aplikasi pengalihan, ikuti langkah-langkah ini:

1. Pastikan bahwa kerangka kerja `django.contrib.sites` [is installed](/id/6.1/ref/contrib/sites/#enabling-the-sites-framework).
2. Tambah pengaturan `'django.contrib.redirects'` to your [`INSTALLED_APPS`](/id/6.1/ref/settings/#std-setting-INSTALLED_APPS).
3. Tambah `'django.contrib.redirects.middleware.RedirectFallbackMiddleware'` ke pengaturan [`MIDDLEWARE`](/id/6.1/ref/settings/#std-setting-MIDDLEWARE) anda.
4. Jalankan perintah [`manage.py migrate`](/id/6.1/ref/django-admin/#django-admin-migrate).

## Bagaimana itu bekerja

`manage.py migrate` creates a `django_redirect` table in your database.
This is a lookup table with `site_id`, `old_path` and `new_path` fields.

[`RedirectFallbackMiddleware`](#django.contrib.redirects.middleware.RedirectFallbackMiddleware) melakukan semua dari pekerjaan. Setiap kali aplikasi Django apapun memunculkan kesalahan 404, middleware ini memeriksa pengalihan basisdata untuk URL diminta sebagai usaha terakhir. Khususnya, itu memeriksa untuk pengalihan dengan diberikan `old_path` dengan ID situs yang berhubungan pada pengaturan [`SITE_ID`](/id/6.1/ref/settings/#std-setting-SITE_ID).

- Jika itu menemukan sebuah kecocokan, dan `new_path` tidak kosong, itu mengalihkan ke `new_path` menggunakan sebuah pengalihan 301 ("Dipindah tetap"). Anda dapat men sub kelaskan [`RedirectFallbackMiddleware`](#django.contrib.redirects.middleware.RedirectFallbackMiddleware) dan setel [`response_redirect_class`](#django.contrib.redirects.middleware.RedirectFallbackMiddleware.response_redirect_class) menjadi [`django.http.HttpResponseRedirect`](/id/6.1/ref/request-response/#django.http.HttpResponseRedirect) untuk menggunakan sebuah pengalihan `302 Moved Temporarily` sebagai gantinya.
- Jika itu menemukan kecocokan, dan `new_path` adalah kosong, itu mengirim sebuah 410 ("Gone") kepala HTTP dan tanggapan (kurang-isi) kosong.
- Jika itu tidak menemukan kecocokan, permintaan berlanjut untuk diolah seperti biasa.

Middleware hanya dapat diaktifasikan untuk 404 -- bukan untuk 500 atau tanggapan kode keadaan apapun lainnya.

Catat bahwa urutan daru hal-hal [`MIDDLEWARE`](/id/6.1/ref/settings/#std-setting-MIDDLEWARE). Umumnya, anda dapat menaruh [`RedirectFallbackMiddleware`](#django.contrib.redirects.middleware.RedirectFallbackMiddleware) pada akhir dari daftar, karena itu adalah usaha terakhir.

Untuk lebih pada middleware, baca [dokumentasi middleware](/id/6.1/topics/http/middleware/).

## Bagaimana menambah, merubah dan menghapus pengalihan

### Melalui antarmuka admin

Jika anda telah mengaktifkan antarmuka admin Django otomatis, anda harus melihat bagian "Redirects" pada halaman indeks admin. Sunting pengalihan ketika anda menyunting obyek lain apapun di sistem.

### Melalui API Python

#### `class models.Redirect`

Redirects are represented by a standard
[Django model](/id/6.1/topics/db/models/), which lives in
[django/contrib/redirects/models.py](https://github.com/django/django/blob/stable/6.1.x/django/contrib/redirects/models.py). You can access redirect
objects via the [Django database API](/id/6.1/topics/db/queries/). For
example:

```pycon
>>> from django.conf import settings
>>> from django.contrib.redirects.models import Redirect
>>> # Add a new redirect.
>>> redirect = Redirect.objects.create(
...     site_id=1,
...     old_path="/contact-us/",
...     new_path="/contact/",
... )
>>> # Change a redirect.
>>> redirect.new_path = "/contact-details/"
>>> redirect.save()
>>> redirect
<Redirect: /contact-us/ ---> /contact-details/>
>>> # Delete a redirect.
>>> Redirect.objects.filter(site_id=1, old_path="/contact-us/").delete()
(1, {'redirects.Redirect': 1})
```

## Middleware

#### `class middleware.RedirectFallbackMiddleware`

Anda dapat merubah kelas-kelas [`HttpResponse`](/id/6.1/ref/request-response/#django.http.HttpResponse) digunakan oleh middleware dengan membuat sebuah subkelas dari [`RedirectFallbackMiddleware`](#django.contrib.redirects.middleware.RedirectFallbackMiddleware) dan terutama `response_gone_class` dan/atau `response_redirect_class`.

#### `response_gone_class`

Kelas [`HttpResponse`](/id/6.1/ref/request-response/#django.http.HttpResponse) digunakan ketika [`Redirect`](#django.contrib.redirects.models.Redirect) tidak ditemukan untuk jalur yang diminta atau mempunyai nilai `new_path` kosong.

Awalan pada [`HttpResponseGone`](/id/6.1/ref/request-response/#django.http.HttpResponseGone).

#### `response_redirect_class`

Kelas [`HttpResponse`](/id/6.1/ref/request-response/#django.http.HttpResponse) yang mengangani pengalihan.

Awalan pada [`HttpResponsePermanentRedirect`](/id/6.1/ref/request-response/#django.http.HttpResponsePermanentRedirect).
