# 重定向應用 #
Django 原生自帶一個可選的重定向應用。它將簡單的重定向保存到數據庫中并處理重定向。它默認使用HTTP 響應狀態碼`301 Moved Permanently`。
## 安裝 ##
請依照下面的步驟安裝重定向應用:
1. 確保`django.contrib.sites` 框架已經安裝。
2. 添加'`django.contrib.redirects`' 到 `INSTALLED_APPS` 設置中。
3. 添加'`django.contrib.redirects.middleware.RedirectFallbackMiddleware`' 到`MIDDLEWARE_CLASSES` 設置中。
4. 運行命令`manage.py migrate`。
## 它是如何工作的 ##
`manage.py migrate` 在數據庫中創建一張`django_redirect` 表。它是一張簡單的查詢表,具有`site_id`、`old_path` 和`new_path` 字段。
`RedirectFallbackMiddleware` 完成所有的工作。每當Django 的應用引發一個404 錯誤,該中間件將到重定向數據庫中檢查請求的URL。它會根據`old_path` 和`SITE_ID` 設置的站點ID 查找重定向的路徑。
+ 如果找到匹配的記錄且`new_path `不為空,它將使用301(“Moved Permanently”)重定向到`new_path` 。你可以子類化`RedirectFallbackMiddleware` 并設置 `response_redirect_class` 為`django.http.HttpResponseRedirect` 來使用302 Moved Temporarily 重定向。
+ 如果找到匹配的記錄而`new_path` 為空,它將發送一個410 (“Gone”) HTTP 頭和空(沒有內容的)響應。
+ 如果沒有找到匹配的記錄,請求將繼續正常處理。
這個中間件只針對404 錯誤啟用 —— 不能用于500 或其它狀態碼。
注意`MIDDLEWARE_CLASSES` 的順序很重要。通常可以將`RedirectFallbackMiddleware` 放在列表的最后,因為它最后執行。
更多的信息可以閱讀[中間件的文檔](http://python.usyiyi.cn/django/topics/http/middleware.html)。
## 如何添加、修改和刪除重定向 ##
### 通過Admin 接口 ###
如果你已經啟用Django 自動生成的`Admin` 接口,你應該可以在`Admin` 的主頁看到“Redirects”部分。編輯這些重定向,就像編輯系統中的其它對象一樣。
### 通過Python API ###
`class models.Redirect`
重定向通過一個標準的Django 模型表示,位于`django/contrib/redirects/models.py`。你可以通過Django 的數據庫API 訪問重定向對象。
## 中間件 ##
`class middleware.RedirectFallbackMiddleware`
你可以通過創建`RedirectFallbackMiddleware` 的子類并覆蓋`response_gone_class` 和/或`response_redirect_class` 來修改中間件使用的`HttpResponse`類。
`response_gone_class`
```
New in Django 1.7.
```
`HttpResponse` 類,用于找不到請求路徑的`Redirect`或找到的`new_path` 值為空的時候。
默認為`HttpResponseGone`。
`response_redirect_class`
```
New in Django 1.7.
```
處理重定向的`HttpResponse` 類。
默認為`HttpResponsePermanentRedirect`。
> 譯者:[Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html),原文:[Redirects](https://docs.djangoproject.com/en/1.8/ref/contrib/redirects/)。
>
> 本文以 [CC BY-NC-SA 3.0](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/) 協議發布,轉載請保留作者署名和文章出處。
>
> [Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html)人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。
- 新手入門
- 從零開始
- 概覽
- 安裝
- 教程
- 第1部分:模型
- 第2部分:管理站點
- 第3部分:視圖和模板
- 第4部分:表單和通用視圖
- 第5部分:測試
- 第6部分:靜態文件
- 高級教程
- 如何編寫可重用的應用
- 為Django編寫首個補丁
- 模型層
- 模型
- 模型語法
- 元選項
- 模型類
- 查詢集
- 執行查詢
- 查找表達式
- 模型的實例
- 實例方法
- 訪問關聯對象
- 遷移
- 模式編輯器
- 編寫遷移
- 高級
- 管理器
- 原始的SQL查詢
- 聚合
- 多數據庫
- 自定義查找
- 條件表達式
- 數據庫函數
- 其它
- 遺留的數據庫
- 提供初始數據
- 優化數據庫訪問
- 視圖層
- 基礎
- URL配置
- 視圖函數
- 快捷函數
- 裝飾器
- 參考
- 內建的視圖
- TemplateResponse 對象
- 文件上傳
- 概覽
- File 對象
- 儲存API
- 管理文件
- 自定義存儲
- 基于類的視圖
- 概覽
- 內建顯示視圖
- 內建編輯視圖
- API參考
- 分類索引
- 高級
- 生成 CSV
- 生成 PDF
- 中間件
- 概覽
- 內建的中間件類
- 模板層
- 基礎
- 面向設計師
- 語言概覽
- 人性化
- 面向程序員
- 表單
- 基礎
- 概覽
- 表單API
- 內建的Widget
- 高級
- 整合媒體
- 開發過程
- 設置
- 概覽
- 應用程序
- 異常
- 概覽
- django-admin 和 manage.py
- 添加自定義的命令
- 測試
- 介紹
- 部署
- 概述
- WSGI服務器
- 部署靜態文件
- 通過email追蹤代碼錯誤
- Admin
- 管理操作
- 管理文檔生成器
- 安全
- 安全概述
- 說明Django中的安全問題
- 點擊劫持保護
- 加密簽名
- 國際化和本地化
- 概述
- 本地化WEB UI格式化輸入
- “本地特色”
- 常見的網站應用工具
- 認證
- 概覽
- 使用認證系統
- 密碼管理
- 日志
- 分頁
- 會話
- 數據驗證
- 其它核心功能
- 按需內容處理
- 重定向
- 信號
- 系統檢查框架