电竞比分网-中国电竞赛事及体育赛事平台

分享

nginx URL重寫(rewrite)配置

 instl 2024-12-11

URL重寫有利于網(wǎng)站首選域的確定,對于同一資源頁面多條路徑的301重定向有助于URL權(quán)重的集中

1.Nginx URL重寫(rewrite)介紹

和apache等web服務(wù)軟件一樣,rewrite的組要功能是實(shí)現(xiàn)RUL地址的重定向。
Nginx的rewrite功能需要PCRE軟件的支持,即通過perl兼容正則表達(dá)式語句進(jìn)行規(guī)則匹配的。
默認(rèn)參數(shù)編譯nginx就會支持rewrite的模塊,但是也必須要PCRE的支持

2.rewrite語法格式及參數(shù)語法:

rewrite是實(shí)現(xiàn)URL重寫的關(guān)鍵指令,根據(jù)regex (正則表達(dá)式)部分內(nèi)容,
重定向到replacement,結(jié)尾是flag標(biāo)記。


rewrite    <regex>    <replacement>    [flag];
關(guān)鍵字      正則        替代內(nèi)容         flag標(biāo)記

關(guān)鍵字:其中關(guān)鍵字error_log不能改變
正則:perl兼容正則表達(dá)式語句進(jìn)行規(guī)則匹配
替代內(nèi)容:將正則匹配的內(nèi)容替換成replacement
flag標(biāo)記:rewrite支持的flag標(biāo)記

rewrite參數(shù)的標(biāo)簽段位置:
server,location,if

flag標(biāo)記說明:
last  #本條規(guī)則匹配完成后,繼續(xù)向下匹配新的location URI規(guī)則
break  #本條規(guī)則匹配完成即終止,不再匹配后面的任何規(guī)則
redirect  #返回302臨時重定向,瀏覽器地址會顯示跳轉(zhuǎn)后的URL地址
permanent  #返回301永久重定向,瀏覽器地址欄會顯示跳轉(zhuǎn)后的URL地址

2.1nginx rewrite變量,常用于匹配HTTP請求頭信息、瀏覽器主機(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ù)器,從哪個頁面來訪問的;
HTTP_COOKIE          客戶端緩存,主要用于存儲用戶名和密碼等信息;
HTTP_HOST            匹配服務(wù)器ServerName域名;
HTTP_ACCEPT          客戶端的瀏覽器支持的MIME類型;      
REMOTE_ADDR          客戶端的IP地址
QUERY_STRING         URL中訪問的字符串;
DOCUMENT_ROOT        服務(wù)器發(fā)布目錄;
SERVER_PORT          服務(wù)器端口;
SERVER_PROTOCOL      服務(wù)器端協(xié)議;
TIME_YEAR            年;
TIME_MON             月;
TIME_DAY              日;

3.例子

3.0較難場景

第一種:
將uri中的所有空格替換為"_",連續(xù)的空格替換為一個"_"放到proxy_pass之前,
切記, 下述表達(dá)式中第一個括號后有空格
rewrite '^(\S+) +(\S+)(.*)' $1_$2$3 last;

3.1demo01

rewrite ^/(.*) http://www./$1 permanent;
說明:                                        
rewrite為固定關(guān)鍵字,表示開始進(jìn)行rewrite匹配規(guī)則。
regex部分是 ^/(.*) ,這是一個正則表達(dá)式,匹配完整的域名和后面的路徑地址。
replacement部分是http://www./$1。其中$1是取自regex部分()里的內(nèi)容,匹配成功后跳轉(zhuǎn)到的URL。
flag部分 permanent表示永久301重定向標(biāo)記,即跳轉(zhuǎn)到新的http://www./$1 地址上。

3.2demo02

vi編輯虛擬主機(jī)配置文件

vi conf/vhost/www.abc.com.conf

修改文件內(nèi)容方法1

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;
}

修改文件內(nèi)容方法2

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;
}

3.3將跳轉(zhuǎn)至www.

if ($host = ' ) {
     #其中$1是取自regex部分()里的內(nèi)容,匹配成功后跳轉(zhuǎn)到的URL。
     rewrite ^/(.*)$  http://www./$1  permanent;
}

3.4訪問www.跳轉(zhuǎn)www.test.com/index01.html

rewrite   ^/$  http://www.test.com/index01.html  permanent;

3.5訪問/zy/test01/跳轉(zhuǎn)至/newindex.html,瀏覽器地址不變

rewrite   ^/zy/test01/$     /newindex.html     last;

3.6多域名跳轉(zhuǎn)到www.

if ($host != 'www.jfedu.net’ ) {
    rewrite ^/(.*)$  http://www.zy.com/$1  permanent;
}

3.7訪問文件和目錄不存在跳轉(zhuǎn)至index.php

if ( ! -e $request_filename ) {
    rewrite  ^/(.*)$  /index.php  last;
}

3.8目錄對換 /xxxx/123456 ====> /xxxx?id=123456

rewrite    ^/(.+)/(\d+)      /$1?id=$2       last;

3.9判斷瀏覽器User Agent跳轉(zhuǎn)

if( $http_user_agent  ~ MSIE) {
    rewrite ^(.*)$ /ie/$1 break;
}

3.10 禁止訪問以.sh,.flv,.mp3為文件后綴名的文件

location ~ .*\.(sh|flv|mp3)${
       return 403} 

3.11 將移動用戶訪問跳轉(zhuǎn)至移動端

if ( $http_user_agent ~* "(Android)|(iPhone)|(Mobile)|(WAP)|(UCWEB)" ){
      rewrite ^/$    http://m.jfedu.net/    permanent;
}

3.12 訪問/10690/zy/123跳轉(zhuǎn)至/index.php?tid/10690/items=123,[0-9]表示任意一個數(shù)字,+表示多個,(.+)表示任何多個字符__

rewrite   ^/([0-9]+)/zy/(.+)$     /index.php?tid/$1/items=$2     last;

3.13匹配URL訪問字符串跳轉(zhuǎn)

if ($args ~* tid=13){
    return 404;
}

4.rewrite 企業(yè)應(yīng)用場景

>> 可以調(diào)整用戶瀏覽的URL,看起來更規(guī)范,合乎開發(fā)及產(chǎn)品人員的需求。

>> 為了讓搜索引擎搜錄網(wǎng)站內(nèi)容及用戶體驗(yàn)更好,企業(yè)會將動態(tài)URL地址偽裝成靜態(tài)地址提供服務(wù)。

>> 網(wǎng)址換新域名后,讓舊的訪問跳轉(zhuǎn)到新的域名上。例如,訪問京東的360buy.com會跳轉(zhuǎn)到j(luò)d.com

>> 根據(jù)特殊變量、目錄、客戶端的信息進(jìn)行URL調(diào)整等

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多