1. 程式人生 > >apache rewrite(重定向)

apache rewrite(重定向)

很多時候,由於專案變更的需要,我們會將一個網站的域名變更為另外一個域名,又或者是一個地址轉變為另外一個地址。而在專案裡進行跳轉並不是一個明智的選擇,這個時候我們就可以使用到apache的mod_rewrite模組。

mod_rewrite 提供了基於正則表示式規則動態修改傳入的請求的 URL 的方法。 這允許你以自己喜歡的任意方法對映任意 URL 到你的內部 URL 結構。

當然啟用它的第一步就是要載入相關的模組,你可以開啟httpd.conf將mod_rewrite前的#號註釋掉。

LoadModule rewritemodule modules/modrewrite.so

然後你需要重啟apache伺服器,這樣rewrite模組就開啟了。

這個模組可以在伺服器上下文 (httpd.conf),虛擬主機上下文 ( 指令塊),目錄上下文 (.htaccess 檔案和 指令塊) 對完整的 URL (包含目錄資訊部分和查詢字串部分) 操作。

重寫結果可以進行多種規則處理,如:內部的後續處理,外部請求重定向,甚至透過內部代理, 這取決於你為規則附加的標誌。

而rewrite規則中的標誌通常有以下幾種:

1) R 強制外部重定向

2) F 禁用URL,返回403HTTP狀態碼。

3) G 強制URL為GONE,返回410HTTP狀態碼。

4) P 強制使用代理轉發。

5) L 表明當前規則是最後一條規則,停止分析以後規則的重寫。

6) N 重新從第一條規則開始執行重寫過程。

7) C 與下一條規則關聯

8) T=MIME-type(force MIME type) 強制MIME型別

9) NS 只用於不是內部子請求

10) NC 不區分大小寫

11) QSA 追加請求字串

12) NE 不在輸出轉義特殊字元 \%3d$1 等價於 =$1

常用的rewrite規則例項

301重定向

將www.aaa.com 301 到 www.bbb.com

```

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www.aaa.com [NC]

RewriteRule ^(.*) http://www.bbb.com/ [R=301,L]

```

偽靜態

/info/info.php?infoid=100轉換為/info/100.html個格式

```

RewriteEngine on

RewriteRule index.html index.php

RewriteRule (\d+).html$ info.php\?infoid=$1

```

內部重定向

通過 http://natserver/forum 來訪問webserver上面提供的論壇服務,而forum目錄在 /var/www/html 下

```

RewriteEngine on

RewriteBase /forum/

RewriteRule (.*) http://webserverip/$1 [P,L]

使得傳送方有足夠的資訊來知道需要重傳哪些包,而不需要重傳哪些包。

往期回顧:apache多處理模組(MPM)https://blog.csdn.net/RJ0024/article/details/85328757