2013-08-03 12 views
78

Ich bin dabei, die URL-Struktur zu reorganisieren. Ich muss Umleitungsregeln für bestimmte URLs einrichten - ich verwende NGINX.Wie Umleiten einzelner URL in Nginx?

Im Grunde etwas wie folgt aus:

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 

Dank!

+3

Ist es "issé" oder "Problem"?! Antworten nehmen "Problem" an ... –

+0

es ist Ausgabe, reparierte den Tippfehler – tokmak

Antwort

84

Diese in der Server-Richtlinie:

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

oder duplizieren:

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 Ich prüfte gerade dieses auf einem Hafenarbeiterbild mit der Version '1.10.3' und es war in Ordnung, konnten Sie Ihre Konfigurationsdatei irgendwie zur Verfügung stellen? Vermutlich vermissen Sie etwas. –

28

Wenn Sie mehr als ein paar Umleitungen duplizieren müssen, können Sie mit einer Karte betrachten:

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

Dies ist, was ich hier suchen gesucht - Putting diese in eine enthaltene Datei ist eine hervorragende Möglichkeit, meine .htaccess-Datei voller RewriteRules von Apache zu ersetzen. –

+2

Wie würden Sie diesen Map-Ansatz mit einem bestehenden Standort/... Proxy-Pass-Typ-Setup kombinieren? –

+0

Im '@ redirect-map' Speicherort könnten Sie' if ($ redirect_uri = "") {return 404;} 'gefolgt von proxy_pass stuff versuchen. Benötigt möglicherweise ein Neuschreiben mit '$ redirect_uri'. –