我試圖在 NGINX 中設定快取,并且只需要包含某些引數(如果給定)來創建密鑰并快取站點。但是,如果引數的順序不同,或者根本沒有給出,我也不會讓它作業。
URL 可以是:
https://www.example.com/xyz/
https://www.example.com/xyz/?param1=123¶m2=456¶m3=789
https://www.example.com/xyz/?param2=456¶m3=789¶m1=123
https://www.example.com/xyz/?param3=789¶m1=123¶m2=456
https://www.example.com/xyz/?param1=123¶m3=789¶m2=456
https://www.example.com/xyz/?param1=123¶m2=456
只有路徑和param1(可選)和param2(可選)與快取相關。其他引數應忽略。所以最后我需要三個命名的捕獲組,我可以為 NGINX 創建一個映射:
map $request_uri $request_uri_path {
"~^(?P<path>[^?]*)(?:\?.*)?(?P<p1>param1\=[^&]*) (?:\&.*)?(?P<p2>param3\=[^&]*) $" $path$p1$p2;
}
fastcgi_cache_key "$scheme$request_method$host$request_uri_path";
但顯然我的正則運算式不起作用https://regex101.com/r/Hf2jCj/1
~^(?P<path>[^?]*)(?:\?.*)?(?P<p1>param1\=[^&]*) (?:\&.*)?(?P<p2>param3\=[^&]*) $
uj5u.com熱心網友回復:
使用 amap您可以根據需要添加任意數量的正則運算式。正則運算式按順序處理,直到找到匹配項。有關詳細資訊,請參閱此檔案。
在不太具體的模式之前列出更具體的模式。
您可能希望匹配包含param1 param3和param3 param1的 URL ,在模式以僅與其中一個引數匹配 URL之前,在匹配不具有任何引數的 URL 之前。
例如:
map $request_uri $request_uri_path {
~^(?<path>[^?]*)\?([^&]*&)*(?<p1>param1\=[^&]*)([^&]*&)*(?<p2>param3\=[^&]*) $path$p1$p2;
~^(?<path>[^?]*)\?([^&]*&)*(?<p2>param3\=[^&]*)([^&]*&)*(?<p1>param1\=[^&]*) $path$p1$p2;
~^(?<path>[^?]*)\?([^&]*&)*(?<p1>param1\=[^&]*) $path$p1;
~^(?<path>[^?]*)\?([^&]*&)*(?<p2>param3\=[^&]*) $path$p2;
~^(?<path>[^?]*) $path;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/458934.html
上一篇:從字典中獲取一部分
下一篇:用于提取URL組件的正則運算式
