rewirte 規則

Nginx Rewrite  php

  Rewirte 規則也稱爲規則重寫,主要功能是實現瀏覽器訪問 HTTP URL 的跳轉,其正則html

表達式是基於 Perl 語言。一般而言,幾乎全部的 WEB 服務器都可以支持 URL 重寫。Rewritenginx

URL 規則重寫的用途:瀏覽器

對搜索引擎優化(Search Engine Optimization,SEO)友好,利於搜索引擎抓取網站頁面;緩存

  隱藏網站 URL 真實地址,瀏覽器顯示更加美觀;服務器

  網站變動升級,能夠基於 Rewrite 臨時重定向到其餘頁面。優化

  Nginx Rewrite 規則使用中有三個概念須要理解,分別是:Rewrite 結尾標識符、Rewrite網站

規則經常使用表達式、Nginx Rewrite 變量,以下爲三個概念的詳解:搜索引擎

(1) Nginx Rewrite 結尾標識符,用於 Rewrite 規則末尾,表示規則的執行屬性。spa

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;

}

 

  1. 訪問 www.baidu.com跳轉 new_index.html。

 

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;

相關文章
相關標籤/搜索