URL重寫有利於網站首選域的肯定,對於同一資源頁面多條路徑的301重定向有助於URL權重的集中html
和apache等web服務軟件同樣,rewrite的組要功能是實現RUL地址的重定向。Nginx的rewrite功能須要PCRE軟件的支持,即經過perl兼容正則表達式語句進行規則匹配的。默認參數編譯nginx就會支持rewrite的模塊,可是也必需要PCRE的支持nginx
rewrite是實現URL重寫的關鍵指令,根據regex(正則表達式)部份內容,重定向到replacement,結尾是flag標記。web
rewrite <regex> <replacement> [flag];正則表達式
關鍵字 正則 替代內容 flag標記apache
關鍵字:其中關鍵字error_log不能改變瀏覽器
正則:perl兼容正則表達式語句進行規則匹配網站
替代內容:將正則匹配的內容替換成replacement搜索引擎
flag標記:rewrite支持的flag標記spa
flag標記說明:server
last #本條規則匹配完成後,繼續向下匹配新的location URI規則
break #本條規則匹配完成即終止,再也不匹配後面的任何規則
redirect #返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址
permanent #返回301永久重定向,瀏覽器地址欄會顯示跳轉後的URL地址
server,location,if
rewrite ^/(.*) http://www.czlun.com/$1 permanent;
說明:
rewrite爲固定關鍵字,表示開始進行rewrite匹配規則
regex部分是 ^/(.*) ,這是一個正則表達式,匹配完整的域名和後面的路徑地址
replacement部分是http://www.czlun.com/$1 $1,是取自regex部分()裏的內容。匹配成功後跳轉到的URL。
flag部分 permanent表示永久301重定向標記,即跳轉到新的 http://www.czlun.com/$1 地址上
字符 |
描述 |
\ |
將後面接着的字符標記爲一個特殊字符或一個原義字符或一個向後引用。如「\n」匹配一個換行符,而「\$」則匹配「$」 |
^ |
匹配輸入字符串的起始位置 |
$ |
匹配輸入字符串的結束位置 |
* |
匹配前面的字符零次或屢次。如「ol*」能匹配「o」及「ol」、「oll」 |
+ |
匹配前面的字符一次或屢次。如「ol+」能匹配「ol」及「oll」、「oll」,但不能匹配「o」 |
? |
匹配前面的字符零次或一次,例如「do(es)?」能匹配「do」或者「does」,"?"等效於"{0,1}" |
. |
匹配除「\n」以外的任何單個字符,若要匹配包括「\n」在內的任意字符,請使用諸如「[.\n]」之類的模式。 |
(pattern) |
匹配括號內pattern並能夠在後面獲取對應的匹配,經常使用$0...$9屬性獲取小括號中的匹配內容,要匹配圓括號字符須要\(Content\) |
Nginx的rewrite功能在企業裏應用很是普遍:
u 能夠調整用戶瀏覽的URL,看起來更規範,合乎開發及產品人員的需求。
u 爲了讓搜索引擎搜錄網站內容及用戶體驗更好,企業會將動態URL地址假裝成靜態地址提供服務。
u 網址換新域名後,讓舊的訪問跳轉到新的域名上。例如,訪問京東的360buy.com會跳轉到jd.com
u 根據特殊變量、目錄、客戶端的信息進行URL調整等
vi conf/vhost/www.abc.com.conf
#vi編輯虛擬主機配置文件
文件內容
server {
listen 80;
server_name abc.com;
rewrite ^/(.*) http://www.abc.com/$1 permanent;
}
server {
listen 80;
server_name www.abc.com;
location / {
root /data/www/www;
index index.html index.htm;
}
error_log logs/error_www.abc.com.log error;
access_log logs/access_www.abc.com.log main;
}
或者
server {
listen 80;
server_name abc.com www.abc.com;
if ( $host != 'www.abc.com' ) {
rewrite ^/(.*) http://www.abc.com/$1 permanent;
}
location / {
root /data/www/www;
index index.html index.htm;
}
error_log logs/error_www.abc.com.log error;
access_log logs/access_www.abc.com.log main;
}
確認無誤即可重啓,操做以下:
nginx -t
#結果顯示ok和success沒問題即可重啓
nginx -s reload
打開瀏覽器訪問abc.com
頁面打開後,URL地址欄的abc.com變成了www.abc.com說明URL重寫成功。