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