簡體   English   中英

將網址重定向到網址到www

[英]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后面的部分? 是查詢字符串(或參數),並且不是locationrewrite指令使用的規范化URI的一部分-因此您的規則將永遠不匹配。 有關詳細信息,請參見此文檔

如果您有復雜的正則表達式需要與整個URI(包括查詢字符串)匹配,則需要使用$request_uri變量。 可以使用ifmap進行測試。 包含多個正則表達式的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM