Wie leite ich eine einzelne URL in Nginx um?


111

Ich bin dabei, die URL-Struktur neu zu organisieren. Ich muss Umleitungsregeln für bestimmte URLs einrichten - ich verwende NGINX.

Grundsätzlich so etwas:

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

Vielen Dank!


3
Ist es "isse" oder "issue" ?! Antworten gehen von "Problem" aus ...
Matthew Wilcoxson

Es ist ein
tokmak

Antworten:


122

Fügen Sie dies in Ihre Server-Direktive ein:

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

Oder duplizieren Sie es:

location /issue1 {
   rewrite ^/.* http://$server_name/shop/issues/custom_issue_name1 permanent;
}
location /issue2 {
   rewrite ^.* http://$server_name/shop/issues/custom_issue_name2 permanent;
}
 ...

139
location ~ /issue([0-9]+) {
    return 301 http://example.com/shop/issues/custom_isse_name$1;
}

@Cybolic Ich habe dies gerade auf einem Docker-Image mit der Version getestet 1.10.3und es war in Ordnung. Könnten Sie Ihre Konfigurationsdatei irgendwie bereitstellen? Ihnen fehlt wahrscheinlich etwas.
Mohammad AbuShady

34

Wenn Sie mehr als ein paar Weiterleitungen duplizieren müssen, können Sie eine Karte verwenden:

# map is outside of server block
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 gesucht habe - das Einfügen dieser in eine enthaltene Datei ist eine hervorragende Möglichkeit, meine .htaccess-Datei voller RewriteRules von Apache zu ersetzen.
Josh aus Qaribou

3
Wie würden Sie diesen Kartenansatz mit einem vorhandenen Setup des Typs location / ... proxy_pass kombinieren?
Michael Dausmann

An der @redirect-mapStelle könnten Sie versuchen, if ($redirect_uri = "") {return 404;}gefolgt von proxy_pass Sachen. Möglicherweise muss mit neu geschrieben werden $redirect_uri.
Cole Tierney

Dies kann locationje nach Setup anstelle der 2 Blöcke erforderlich sein . Dies gilt beispielsweise für Craft CMS. location ~ ^(.*)$ { if ($redirect_uri) { # redirect if the variable is defined return 301 $redirect_uri; } try_files $uri $uri/ /index.php?p=$uri&$args; }
Luwes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.