国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

詳解常用的nginx rewrite重寫(xiě)規則

發(fā)布時(shí)間:2023-05-26 09:24 來(lái)源:西部 閱讀:160 作者:西部數碼 欄目: 虛擬主機 歡迎投稿:712375056

服務(wù)器

本文提供一些常用的rewrite重寫(xiě)規則,用來(lái)美化網(wǎng)頁(yè)的鏈接。規則里面的$1$2你不知道是怎么來(lái)的話(huà),只要記住,第一個(gè)()里面的是$1,第二個(gè)()里面的是$2.

請求的URL是給人看的,重寫(xiě)后的URL是給電腦看的。

執行搜索

這個(gè)規則的目的是為了執行搜索,搜索URL中包含的關(guān)鍵字。

請求的URL //hqidi.com/search/some-search-keywords
重寫(xiě)后URL //hqidi.com/search.php?p=some-search-keywords
重寫(xiě)規則         rewrite ^/search/(.*)$ /search.php?p=$1?;

用戶(hù)個(gè)人資料頁(yè)面

大多數運行訪(fǎng)問(wèn)者注冊的動(dòng)態(tài)網(wǎng)站都提供一個(gè)可以查看個(gè)人資料的頁(yè)面,這個(gè)頁(yè)面的URL包含用戶(hù)的UID和用戶(hù)名

請求的URL //hqidi.com/user/47/dige
重寫(xiě)后URL //hqidi.com/user.php?id=47&name=dige
重寫(xiě)規則         rewrite ^/user/([0-9] )/(. )$ /user.php?id=$1&name=$2?;

多個(gè)參數

有些網(wǎng)站對字符串參數使用不同的語(yǔ)法,例如 通過(guò)斜線(xiàn)“/”來(lái)分隔非命名參數

請求的URL //hqidi.com/index.php/param1/param2/param3
重寫(xiě)后URL //hqidi.com/index.php?p1=param1&p2=param2&p3=param3
重寫(xiě)規則         rewrite ^/index.php/(.*)/(.*)/(.*)$ /index.php?p1=$1&p2=$2&p3=$3?;

類(lèi)似百科的格式

這種格式特點(diǎn),一個(gè)前綴目錄,后跟文章名稱(chēng)

請求的URL //hqidi.com/wiki/some-keywords
重寫(xiě)后URL //hqidi.com/wiki/index.php?title=some-keywords
重寫(xiě)規則         rewrite ^/wiki/(.*)$ /wiki/index.php?title=$1?;

論壇

論壇一般用到兩個(gè)參數,一個(gè)話(huà)題標識(topic)一個(gè)出發(fā)點(diǎn)(starting post)

請求的URL //hqidi.com/topic-1234-50-some-keywords.html
重寫(xiě)后URL //hqidi.com/viewtopic.php?topic=1234&start=50
重寫(xiě)規則         rewrite ^/topic-([0-9] )-([0-9] )-(.*)\\.html$ viewtopic.php?topic=$1&start=$2?;

特網(wǎng)科技站的文章

這種URL結構的特點(diǎn),由一個(gè)文章標識符,后跟一個(gè)斜線(xiàn),和一個(gè)關(guān)鍵字列表組成。

請求的URL //hqidi.com/88/future
重寫(xiě)后URL //hqidi.com/atricle.php?id=88
重寫(xiě)規則         rewrite ^/([0-9] )/.*$ /aticle.php?id=$1?;

最后一個(gè)問(wèn)號

若被替換的URI中含有參數(類(lèi)似/app/test.php?id=5之類(lèi)的URI),默認情況下參數會(huì )被自動(dòng)附加到替換串上,可以通過(guò)在替換串的末尾加上?標記來(lái)解決這一問(wèn)題。

rewrite ^/users/(.*)$ /show?user=$1? last;

比較一個(gè)加上?標記和不加?標記的URL跳轉區別:

rewrite ^/test(.*)$ //hqidi.com/home premanent;

訪(fǎng)問(wèn)//hqidi.com/test?id=5 經(jīng)過(guò)301跳轉后的URL地址為 //hqidi.com/home?id=5

rewrite ^/test(.*)$ //hqidi.com/home? premanent;

訪(fǎng)問(wèn)//hqidi.com/test?id=5 經(jīng)過(guò)301跳轉后的URL地址為 //hqidi.com/home

Nginx的rewrite功能需要PCRE軟件的支持,即通過(guò)perl兼容正則表達式語(yǔ)句進(jìn)行規則匹配的。默認參數編譯nginx就會(huì )支持rewrite的模塊,但是也必須要PCRE的支持

rewrite是實(shí)現URL重寫(xiě)的關(guān)鍵指令,根據regex(正則表達式)部分內容,重定向到replacement,結尾是flag標記。

nginx rewrite指令執行順序

1.執行server塊的rewrite指令(這里的塊指的是server關(guān)鍵字后{}包圍的區域,其它xx塊類(lèi)似)
2.執行location匹配
3.執行選定的location中的rewrite指令

如果其中某步URI被重寫(xiě),則重新循環(huán)執行1-3,直到找到真實(shí)存在的文件。

如果循環(huán)超過(guò)10次,則返回500 Internal Server Error錯誤。

flag標志位

rewrite的語(yǔ)法很簡(jiǎn)單,如:

rewrite regex URL [flag];

rewrite是關(guān)鍵字,regex是正則表達式,URL是要替代的內容,[flag]是標記位的意思,它有以下幾種值:

last: 相當于A(yíng)pache的[L]標記,表示完成rewrite
break: 停止執行當前虛擬主機的后續rewrite指令集
redirect: 返回302臨時(shí)重定向,地址欄會(huì )顯示跳轉后的地址
permanent: 返回301永久重定向,地址欄會(huì )顯示跳轉后的地址

因為301和302不能簡(jiǎn)單的只返回狀態(tài)碼,還必須有重定向的URL,這就是return指令無(wú)法返回301,302的原因了。這里 last 和 break 區別有點(diǎn)難以理解:

last一般寫(xiě)在server和if中,而break一般使用在location中
last不終止重寫(xiě)后的url匹配,即新的url會(huì )再從server走一遍匹配流程,而break終止重寫(xiě)后的匹配
break和last都能組織繼續執行后面的rewrite指令

來(lái)看一個(gè)簡(jiǎn)單實(shí)例:

rewrite ^/listings/(.*)$ /listing.html?listing=$1 last;
rewrite ^/images/(.*)_(\\d )x(\\d )\\.(png|jpg|gif)$ /resizer/$1.$4?width=$2&height=$3? last;

第一條重寫(xiě)規則中,我們可以使用友好的URL:http://wap.friendlycc.com.cn/host/

第二條規則中,對形如http://wap.friendlycc.com.cn/host/

if指令與全局變量

if指令語(yǔ)法為if(condition){…},對給定的條件condition進(jìn)行判斷。如果為真,大括號內的rewrite指令將被執行。

來(lái)看代碼規則:

if ($http_user_agent ~ MSIE) {
  rewrite ^(.*)$ /msie/$1 break;
} //如果UA包含MSIE,rewrite請求到/msid/目錄下
 
if ($http_cookie ~* id=([^;] )(?:;|$)) {
  set $id $1;
 } //如果cookie匹配正則,設置變量$id等于正則引用部分
 
if ($request_method = POST) {
  return 405;
} //如果提交方法為POST,則返回狀態(tài)405(Method not allowed)。return不能返回301,302
 
if ($slow) {
  limit_rate 10k;
} //限速,$slow可以通過(guò) set 指令設置
 
if (!-f $request_filename){
  break;
  proxy_pass http://wap.friendlycc.com.cn/host/ 
} //如果請求的文件名不存在,則反向代理到localhost 。這里的break也是停止rewrite檢查
 
if ($args ~ post=140){
  rewrite ^ http://wap.friendlycc.com.cn/host/ permanent;
} //如果query string中包含post=140,永久重定向到mysite.com

if指令中,可以使用全局變量,這些變量有:

$args: #這個(gè)變量等于請求行中的參數,同$query_string
$content_length: 請求頭中的Content-length字段。
$content_type: 請求頭中的Content-Type字段。
$document_root: 當前請求在root指令中指定的值。
$host: 請求主機頭字段,否則為服務(wù)器名稱(chēng)。
$http_user_agent: 客戶(hù)端agent信息
$http_cookie: 客戶(hù)端cookie信息
$limit_rate: 這個(gè)變量可以限制連接速率。
$request_method: 客戶(hù)端請求的動(dòng)作,通常為GET或POST。
$remote_addr: 客戶(hù)端的IP地址。
$remote_port: 客戶(hù)端的端口。
$remote_user: 已經(jīng)經(jīng)過(guò)Auth Basic Module驗證的用戶(hù)名。
$request_filename: 當前請求的文件路徑,由root或alias指令與URI請求生成。
$scheme: HTTP協(xié)議(如http,https)。
$server_protocol: 請求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1。
$server_addr: 服務(wù)器地址,在完成一次系統調用后可以確定這個(gè)值。
$server_name: 服務(wù)器名稱(chēng)。
$server_port: 請求到達服務(wù)器的端口號。
$request_uri: 包含請求參數的原始URI,不包含主機名,如:”/foo/bar.php?arg=baz”。
$uri: 不帶請求參數的當前URI,$uri不包含主機名,如”/foo/bar.html”。
$document_uri: 與$uri相同。

使用return跳轉

我們有時(shí)需要在Nginx上使用rewrite做301地址跳轉,比如以下規則:

rewrite ^ $schemehttp://wap.friendlycc.com.cn/host/ permanent;

當訪(fǎng)問(wèn)任意url都會(huì )301永久定向到www.mysite.com的url上。這個(gè)寫(xiě)法沒(méi)錯,但是因為使用了rewrite的正則匹配,會(huì )損耗一部分資源,nginx官網(wǎng)不推薦這樣寫(xiě)。我們可以使用return同樣可以實(shí)現301跳轉,簡(jiǎn)單實(shí)用,看實(shí)例:

301永久定向到新域名

server {
  listen 80;
  listen 443 ssl;
  server_name www.old-name.com old-name.com;
  return 301 $schemehttp://wap.friendlycc.com.cn/host/
}

以上代碼實(shí)現了老域名301跳轉到新域名上,假如網(wǎng)站要更換新域名的話(huà)使用此方法做301跳轉。

不帶www的域名301跳轉到帶www的域名

server {
  listen 80;
  listen 443 ssl;
  server_name mysite.com;
  return 301 $schemehttp://wap.friendlycc.com.cn/host/
}

http站點(diǎn)301跳轉到https站點(diǎn)

server {
  listen 80;
  server_name www.mysite.com;
  return 301 http://wap.friendlycc.com.cn/host/
}

以上就是有關(guān)Nginx的rewrite重寫(xiě)與重定向的介紹,覺(jué)得有用就請練習多遍,收藏好此文不迷路。也希望大家多多支持特網(wǎng)科技。

更多關(guān)于云服務(wù)器,域名注冊,虛擬主機的問(wèn)題,請訪(fǎng)問(wèn)特網(wǎng)科技官網(wǎng):wap.friendlycc.com.cn

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

性XXXXX欧美极品少妇| 精品久久国产字幕高潮| 狠狠色噜噜狠狠狠狠97俺也去| 日韩精品人妻一区二区三区四区| 亚洲国产精品嫩草影院| 欧美性XXXX极品HD欧美风情|