2015-03-30 9 views
5

Mam około 400 adresów URL, które zmienią się w nowej wersji iz jakichś powodów nie mogę powtórzyć tego samego typu struktury adresów URL w nowej witrynie.nginx: Jak masowe stałe przekierowanie z podanej listy?

Moje pytanie brzmi: czy mogę podać listę adresów URL dla nginx (tak, znam 400) i powiedzieć mu po prostu, że każdy z nich przechodzi do innego adresu URL?

Tak jak powiedziałem, struktura adresu URL będzie inna, więc nie mogę użyć żadnego wzorca.

Z góry dziękuję.

Odpowiedz

6

Prawdopodobnie najprostszym sposobem na to jest zawijanie dyrektywy map wokół listy. Konfiguracja w tym przypadku będzie wyglądać następująco:

map $request_uri $new_uri { 
    default ""; 
    /old/page1.html /new/page1.html; 
    /old/page2.html /new/page2.html; 
    ... 
} 

server { 
    ... 

    if ($new_uri != "") { 
     rewrite ^(.*)$ $new_uri permanent; 
    } 

    ... 
} 
8

Jeśli masz bardzo długą listę wpisów, może być dobry pomysł, aby zachować je na zewnątrz pliku konfiguracyjnego nginx:

map_hash_bucket_size 256; # see http://nginx.org/en/docs/hash.html 

map $request_uri $new_uri { 
    include /etc/nginx/oldnew.map; #or any file readable by nginx 
} 

server { 
    listen  80; 
    server_name your_server_name; 

    if ($new_uri) { 
     return 301 $new_uri; 
    } 

    ...  
} 

/etc/nginx/oldnew.map próbki:

/my-old-url /my-new-url; 
/old.html /new.html; 

pamiętaj, aby zakończyć każdy wiersz z ";" zwęglać!

Ponadto, jeśli trzeba przekierować wszystkie adresy URL do innego hosta, można użyć:

return 301 http://example.org$new_uri; 

Lub, jeśli trzeba także przekierować do innego portu:

return 301 http://example.org:8080$new_uri; 
+1

mapach powinien zawierać ';' na końcu każdej linii powoduje błąd EOL – paimpozhil

+0

Dziękuję @paimpozhil za brakujący szczegół – lifeisfoo

Powiązane problemy