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