rewirte 规则
Nginx Rewrite ?
? Rewirte 規(guī)則也稱為規(guī)則重寫,主要功能是實(shí)現(xiàn)瀏覽器訪問(wèn)?HTTP URL 的跳轉(zhuǎn),其正則
表達(dá)式是基于 Perl?語(yǔ)言。通常而言,幾乎所有的 WEB?服務(wù)器均可以支持 URL?重寫。Rewrite
URL 規(guī)則重寫的用途:
對(duì)搜索引擎優(yōu)化(Search Engine Optimization,SEO)友好,利于搜索引擎抓取網(wǎng)站頁(yè)面;
? 隱藏網(wǎng)站 URL?真實(shí)地址,瀏覽器顯示更加美觀;
? 網(wǎng)站變更升級(jí),可以基于 Rewrite?臨時(shí)重定向到其他頁(yè)面。
? Nginx Rewrite 規(guī)則使用中有三個(gè)概念需要理解,分別是:Rewrite 結(jié)尾標(biāo)識(shí)符、Rewrite
規(guī)則常用表達(dá)式、Nginx Rewrite?變量,如下為三個(gè)概念的詳解:
(1) Nginx Rewrite 結(jié)尾標(biāo)識(shí)符,用于?Rewrite 規(guī)則末尾,表示規(guī)則的執(zhí)行屬性。
last ?:相當(dāng)于?Apache 里的(L)標(biāo)記,表示完成?rewrite 匹配;
break:本條規(guī)則匹配完成后,終止匹配,不再匹配后面的規(guī)則。
redirect:返回?302 臨時(shí)重定向,瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的?URL 地址。
permanent:返回?301 永久重定向,瀏覽器地址欄會(huì)顯示跳轉(zhuǎn)后的?URL 地址。
其中 last?和 break?用來(lái)實(shí)現(xiàn) URL?重寫時(shí),瀏覽器地址欄 URL?地址不變。
2) Nginx Rewrite 規(guī)則常用表達(dá)式,主要用于匹配參數(shù)、字符串及過(guò)濾設(shè)置。
?
| . | ? | 匹配任何單字符; |
| [word] | ? | 匹配字符串:word; |
| [^word] | ? | 不匹配字符串:word; |
| jfedu|jfteach | 可選擇的字符串:jfedu|jfteach; | |
| ? | ? | 匹配 0?到 1?個(gè)字符; |
| * | ? | 匹配 0?到多個(gè)字符; |
| + | ? | 匹配 1?到多個(gè)字符; |
| ^ | ? | 字符串開(kāi)始標(biāo)志; |
| $ | ? | 字符串結(jié)束標(biāo)志; |
| \n | ? | 轉(zhuǎn)義符標(biāo)志。 |
| ? | ? | |
| (3) | Nginx Rewrite 變量,常用于匹配?HTTP 請(qǐng)求頭信息、瀏覽器主機(jī)名、URL 等。 | |
?
HTTP headers:HTTP_USER_AGENT, HTTP_REFERER, HTTP_COOKIE, HTTP_HOST,
?
HTTP_ACCEPT;
connection & request: REMOTE_ADDR, QUERY_STRING;
server internals: DOCUMENT_ROOT, SERVER_PORT, SERVER_PROTOCOL;
system stuff: TIME_YEAR, TIME_MON, TIME_DAY。
詳解如下:
HTTP_USER_AGENT 用戶使用的代理,例如瀏覽器;
HTTP_REFERER 告知服務(wù)器,從哪個(gè)頁(yè)面來(lái)訪問(wèn)的;
HTTP_COOKIE 客戶端緩存,主要用于存儲(chǔ)用戶名和密碼等信息;
HTTP_HOST 匹配服務(wù)器 ServerName?域名;
HTTP_ACCEPT 客戶端的瀏覽器支持的 MIME?類型;
REMOTE_ADDR 客戶端的 IP?地址
QUERY_STRING URL 中訪問(wèn)的字符串;
DOCUMENT_ROOT 服務(wù)器發(fā)布目錄;
SERVER_PORT 服務(wù)器端口;
SERVER_PROTOCOL 服務(wù)器端協(xié)議;
TIME_YEAR 年;
?
| TIME_MON | 月; | |
| TIME_DAY | 日; | |
| ? | ? | |
| (4) | Nginx ?Rewrite ?以下配置均配置在?nginx.conf 或者?vhosts.conf ?中,企業(yè)中常用的 | |
?
Nginx Rewrite 案例如下:
1. 將 baidu.com?跳轉(zhuǎn)至?ww.baidu.com。
if ($host = 'jfedu.net' ) {
rewrite ^/(.*)$ ww.baidu.com?permanent;
}
?
?
rewrite ^/$ http://www.baidu.com/new_index.html permanent;
?
2.訪問(wèn)/baidu/test01/跳轉(zhuǎn)至/newindex.html,瀏覽器地址不變。
?
rewrite ^/test01/$ ?http://www.baidu/newindex.htmil?last;
?
? 3.多域名跳轉(zhuǎn)到 www.baidu.com。
?
if ($host != ‘www.baidu.com’ ) {
rewrite ^/(.*)$ http://www.baidu.com/$1?permanent;?
}
?
4. 訪問(wèn)文件和目錄不存在跳轉(zhuǎn)至 index.php。
?
if ( !-e $request_filename )?
{
rewrite ^/(.*)$ /index.php last;
}
?
5.目錄對(duì)換 /xxxx/123456 ?====> ?/xxxx?id=123456。
?
rewrite ^/(.+)/(\d+) /$1?id=$2 last;
?
6.判斷瀏覽器 User Agent?跳轉(zhuǎn)。
?
if( $http_user_agent ~ MSIE)
{
rewrite ^(.*)$ /ie/$1 break;
}
?
7.禁止訪問(wèn)以.sh,.flv,.mp3?為文件后綴名的文件。
?
location ~ .*\.(sh|flv|mp3)$?
{?
return 403;
}
?
9.將移動(dòng)用戶訪問(wèn)跳轉(zhuǎn)至移動(dòng)端。
?
if ( $http_user_agent ~* "(Android)|(iPhone)|(Mobile)|(WAP)|(UCWEB)" )
{
rewrite ^/$ http://m.baidu.net/ permanent;
}
?
10. 匹配 URL?訪問(wèn)字符串跳轉(zhuǎn)。
?
if ($args ~* tid=13) { return 404;
}
?
11.訪問(wèn)/10690/baidu/123?跳轉(zhuǎn)至/index.php?tid/10690/items=123,[0-9]表示任意一個(gè)數(shù)字,+?表示多個(gè),(.+)表示任何多個(gè)字符。
rewrite ^/([0-9]+)/baidu/(.+)$ /index.php?tid/$1/items=$2 last;
轉(zhuǎn)載于:https://www.cnblogs.com/linxizhifeng/p/6986318.html
總結(jié)
以上是生活随笔為你收集整理的rewirte 规则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 对迭代器进行切片
- 下一篇: ViewPager (下)-- 利用 F