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.