url重寫是指通過配置conf檔案,以讓**的url中達到某種狀態時則定向/跳轉到某個規則,比如常見的偽靜態、301重定向、瀏覽器定向等
在配置檔案的server
塊中寫,如:
server
server
last和break的區別
因為301和302不能簡單的只返回狀態碼,還必須有重定向的url,這就是return指令無法返回301,302的原因了。這裡 last 和 break 區別有點難以理解:
在location
裡一旦返回break
則直接生效並停止後續的匹配location
server
location = /q.html
}
只是上面的簡單重寫很多時候滿足不了需求,比如需要判斷當檔案不存在時、當路徑包含xx時等條件,則需要用到if
if (表示式)
一些內建的條件判斷:
$args :這個變數等於請求行中的引數,同$query_string
$content_length : 請求頭中的content-length欄位。
$content_type : 請求頭中的content-type欄位。
$document_root : 當前請求在root指令中指定的值。
$host : 請求主機頭欄位,否則為伺服器名稱。
$http_user_agent : 客戶端agent資訊
$http_cookie : 客戶端cookie資訊
$limit_rate : 這個變數可以限制連線速率。
$request_method : 客戶端請求的動作,通常為get或post。
$remote_port : 客戶端的埠。
$remote_user : 已經經過auth basic module驗證的使用者名稱。
$request_filename : 當前請求的檔案路徑,由root或alias指令與uri請求生成。
$scheme : http方法(如http,https)。
$server_protocol : 請求使用的協議,通常是http/1.0或http/1.1。
$server_name : 伺服器名稱。
$server_port : 請求到達伺服器的埠號。
$request_uri : 包含請求引數的原始uri,不包含主機名,如:」/foo/bar.php?arg=baz」。
$uri : 不帶請求引數的當前uri,$uri不包含主機名,如」/foo/bar.html」。
$document_uri : 與$uri相同。
如:
訪問鏈結是:http://localhost:88/test1/test2/test.php
# 如果檔案不存在則返回400
if (!-f $request_filename)
# 如果host不是xuexb.com,則301到xuexb.com中
if ( $host != "xuexb.com" )
# 如果請求型別不是post則返回405
if ($request_method = post)
# 如果引數中有 a=1 則301到指定網域名稱
if ($args ~ a=1)
在某種場景下可結合location
規則來使用,如:
# 訪問 /test.html 時
location = /test.html
# 301
rewrite ^ /$name.html permanent;
}
上面表示:
在server
塊中使用,如:
server
}
location表示式型別
等號型別(=)的優先順序最高。一旦匹配成功,則不再查詢其他匹配項。
^~型別表示式。一旦匹配成功,則不再查詢其他匹配項。
正規表示式型別(~ ~*)的優先順序次之。如果有多個location的正則能匹配的話,則使用正規表示式最長的那個。
常規字串匹配型別。按字首匹配。
server
# 訪問真實位址直接報沒許可權
location /admin
}
nginx配置url重寫
url重寫是指通過配置conf檔案,以讓 的url中達到某種狀態時則定向 跳轉到某個規則,比如常見的偽靜態 301重定向 瀏覽器定向等 在配置檔案的server塊中寫,如 server server last和break的區別 因為301和302不能簡單的只返回狀態碼,還必須有重定向的url,這就是...
nginx配置url重寫
url重寫是指通過配置conf檔案,以讓 的url中達到某種狀態時則定向 跳轉到某個規則,比如常見的偽靜態 301重定向 瀏覽器定向等 在配置檔案的server塊中寫,如 server server 因為301和302不能簡單的只返回狀態碼,還必須有重定向的url,這就是return指令無法返回30...
nginx配置url重寫
url重寫是指通過配置conf檔案,以讓 的url中達到某種狀態時則定向 跳轉到某個規則,比如常見的偽靜態 301重定向 瀏覽器定向等 在配置檔案的server塊中寫,如 server serverlast和break的區別 因為301和302不能簡單的只返回狀態碼,還必須有重定向的url,這就是r...