2013-08-03 9 views
78

Jestem w trakcie reorganizacji struktury adresów URL. Potrzebuję skonfigurować reguły przekierowania dla konkretnych adresów URL - Używam NGINX.Jak przekierować pojedynczy URL w Nginx?

Zasadniczo coś takiego:

http://example.com/issue1 --> http://example.com/shop/issues/custom_issue_name1 
http://example.com/issue2 --> http://example.com/shop/issues/custom_issue_name2 
http://example.com/issue3 --> http://example.com/shop/issues/custom_issue_name3 

Dzięki!

+3

Czy to "isse" czy "issue"?! Odpowiedzi zakładają "problem" ... –

+0

to problem, naprawiono literówkę – tokmak

Odpowiedz

84

umieścić to w dyrektywie serwerze:

location /issue { 
    rewrite ^/issue(.*) http://$server_name/shop/issues/custom_issue_name$1 permanent; 
} 

lub powielić go:

location /issue1 { 
    rewrite ^/.* http://$server_name/shop/issues/custom_issue_name1 permanent; 
} 
location /issue2 { 
    rewrite ^.* http://$server_name/shop/issues/custom_issue_name2 permanent; 
} 
... 
113
location ~ /issue([0-9]+) { 
    return 301 http://example.com/shop/issues/custom_isse_name$1; 
} 
+0

@Cybolic Właśnie przetestowałem to na obrazie doka z wersją '1.10.3' i było w porządku, czy mógłbyś podać swój plik konfiguracyjny w jakiś sposób? Prawdopodobnie czegoś brakuje. –

28

Jeśli trzeba powielić więcej niż kilka przekierowań, można rozważyć pomocą mapy:

map $uri $redirect_uri { 
    ~^/issue1/?$ http://example.com/shop/issues/custom_isse_name1; 
    ~^/issue2/?$ http://example.com/shop/issues/custom_isse_name2; 
    ~^/issue3/?$ http://example.com/shop/issues/custom_isse_name3; 
    # ... or put these in an included file 
} 

location/{ 
    try_files $uri $uri/ @redirect-map; 
} 

location @redirect-map { 
    if ($redirect_uri) { # redirect if the variable is defined 
     return 301 $redirect_uri; 
    } 
} 
+4

Oto, po co tu przyszedłem - umieszczenie ich w załączonym pliku to doskonały sposób na zastąpienie mojego pliku .htaccess pełnego RewriteRules z Apache. –

+2

jak połączyć to podejście mapowe z istniejącą konfiguracją lokalizacji/... proxy_pass? –

+0

W lokalizacji '@ redirect-map' możesz wypróbować' if ($ redirect_uri = "") {return 404;} ', a następnie proxy_pass stuff. Może potrzebować przepisania za pomocą '$ redirect_uri'. –

Powiązane problemy