[英]Redirect url to url to www
我在nginx中將URL重定向到URL時遇到問題:
例如,我有一個鏈接:
https://example.com/oferty-specjalne/szczegoly-oferty?OfferID=124296
工作功能:
location ^/oferty-specjalne/szczegoly-oferty(.*)$ {
return 301 https://example.com/oferty-specjalne/; }
不起作用的功能:
location ~ ^/oferty-specjalne/szczegoly-oferty\?OfferID=(124170|124296|124299|123483|63788|97002)$ {
return 301 https://example.com/oferty-specjalne/; }
location ~ ^/oferty-specjalne/szczegoly-oferty?OfferID=(.*)$ {
return 301 https://example.com/oferty-specjalne/$1; }
location ^/oferty-specjalne/szczegoly-oferty?OfferID=97002 {
return 301 https://example.com/oferty-specjalne/; }
我檢查了測試儀中的正則表達式,一切正常。 我想問的信息是我在哪里犯了一個錯誤以及如何解決它,例如。
URI后面的部分?
是查詢字符串(或參數),並且不是location
和rewrite
指令使用的規范化URI的一部分-因此您的規則將永遠不匹配。 有關詳細信息,請參見此文檔 。
如果您有復雜的正則表達式需要與整個URI(包括查詢字符串)匹配,則需要使用$request_uri
變量。 可以使用if
或map
進行測試。 包含多個正則表達式的map
是首選解決方案。
例如:
map $request_uri $redirect {
default 0;
~^/oferty-specjalne/szczegoly-oferty\?OfferID=(124170|124296|124299|123483|63788|97002)$
/oferty-specjalne/;
~^/oferty-specjalne/szczegoly-oferty\?OfferID=(?<offerid>.*)$ /oferty-specjalne/$offerid;
~^/oferty-specjalne/szczegoly-oferty\?OfferID=97002 /oferty-specjalne/;
~^/oferty-specjalne/szczegoly-oferty /oferty-specjalne/;
}
server {
...
if ($redirect) {
return 301 $redirect;
}
正則表達式按順序求值,直到找到匹配的規則為止,因此對規則進行排序的最具體的優先順序和最不具體的最后順序。 使用命名捕獲,因為數字捕獲可能會超出范圍。 如果它們相同,則無需指定方案或域名。 map
指令位於`server塊之外。 有關詳細信息,請參見此文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.