在瀏覽器輸入www.jingdong.com可以幫你跳轉到https://www.jd.com/,而且在輸入一些路徑的時候比如https://www.jd.com/cwwecvwev這種,正常情況會報404資源找不到,但是它幫你重定向到了首頁。
在手機端打開京東是手機端的頁面https://m.jd.com/,在pc端打開的是https://www.jd.com/頁面,在不同的終端打開的頁面的地址是不一樣的。
Nginx的rewrite功能需要pcre軟件的支持,即通過perl兼容正則表達式語句進行規則匹配的。默認參數編譯nginx就會支持rewrite的模塊,但是也必須要pcre的支持。
rewrite是實現URL重寫的關鍵指令,根據regex(正則表達式)部分內容,重定向到replacement,結尾是flag標記。
rewrite語法
rewrite <regex> <replacement> [flag]
正則 替代內容 flag標記
正則:perl兼容正則表達式語句進行規則匹配
1 2 3 4 5 6 7 8 9 10 11 |
. :匹配除換行符以外的任意字符 ? :重複0次或1次 + :重複1次或更多次 * :重複0次或更多次 \d :匹配數字 ^ :匹配字符串的開始字符 $ :匹配字符串的結束字符 {n} :重複n次 {n,} :重複n次或更多次 [c] :匹配單個字符c [a-z] :匹配a-z小寫字母的任意一個 |
在rewrite中,如果使用小括號(),那麼在小括號之間匹配的內容,可以在後面通過$1來引用,$2表示的是前面第二個()裏的內容。
替代內容:將正則匹配的內容替換成replacement
flag標記:rewrite支持的flag標記
flag標記說明:
last #本條規則匹配完成終止當前location的規則,繼續向下匹配新的location URI規則
break #本條規則匹配完成即終止,不再匹配後面的任何規則
redirect #返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址
permanent #返回301永久重定向,瀏覽器地址欄會顯示跳轉後的URL地址
rewrite實現域名跳轉
當訪問test.com時候,跳轉到www.test.com,域名之間的跳躍,即從一個server虛擬主機跳到另外一個server虛擬主機
server {
listen 80;
server_name test.com;
rewrite ^/(.*)$ http://www.test.com/$1;
}
server{
listen 80;
charset utf-8;
server_name www.test.com;
location /{
root /data/www;
index index.html;
}
}
[root@www ~]# echo "rewrite sucess this is www.test.com" > /data/www/index.html
修改C:\windows\system32\drivers\etc/hosts文件添加如下,在本地做解析
192.168.179.99 www.test.com test.com