-1

Ich habe die folgende nginx rewrite rule.

location /search { 
      rewrite ^/search/([^/]*)\.html$ /search/?search=$1 break; 
      try_files $uri $uri/ =404; 
    } 

Ich möchte dies wie aus sein:

http://test.com/search/?search=nginx 

zu:

http://test.com/search/nginx.html 

Ihnen sehr danken.

+0

Danke für das Angebot der Prämie, ich hoffe, Sie finden meine Antwort nützlich. Übrigens, wenn du es wirklich magst und mehr Aufmerksamkeit willst, vergewissere dich, dass du das Bounty nicht sofort vergibst, bevor die Gnadenfrist beginnt, denn sonst würde die Frage von der Bounty-Seite weggehen. Beachten Sie, dass das Annehmen einer Antwort ohne Zutun eines Kopfgeldes eine gute Möglichkeit ist, sowohl das Engagement als auch die Garantie sicherzustellen, dass das Kopfgeld nicht verloren geht, da die Frage weiterhin auf der Bounty-Liste angezeigt wird, bis die Gnadenfrist beginnt. (Normalerweise kommen die meisten Upvotes für die Bounties in den letzten paar Stunden.) Danke, +1! – cnst

+0

Heh, nur ein paar Wochen bis eine fast identische Frage auf ServerFault! https://serverfault.com/questions/866201/an-optimal-way-of-nginx-rewrites-rudel-building-for-pretty-url – cnst

Antwort

0

Sie haben nicht angegeben, welcher Teil nicht funktioniert. Es sieht jedoch in jedem Fall wie eine unvollständige Lösung aus, da Ihnen eine vollständige Zyklusschleife fehlt.

Werfen Sie einen Blick auf nginx redirect loop, remove index.php from url und https://serverfault.com/a/568902/110020 - die Idee ist eine Redirect-Schleife erstellen, aber brechen Sie es aufgrund der Unterschiede in externen vs. internen Redirect.

Versuchen Sie dies mit der vollen Config bei https://gist.github.com/cnst/3521404dfdf5cb7b4c526b5c6dff38ff:

location = /search/ { 
    if ($arg_search) { 
     return 302 /search/$arg_search.html; 
    } 
    return 200 
    "<!DOCTYPE html><title>search</title> 
    <form><input name='search'/></form>\n"; 
} 
location /search/ { 
    rewrite  ^/search/([^/]*)\.html$  /search/?search=$1 break; 
    proxy_pass http://localhost:7381; 
} 

Der obige Code wird automatisch /search/?search=nginx-/search/nginx.html extern umleiten, so dass die Lage im Browser ändern, wird aber dann die Anforderung mit dem Prozess Backend, als ob keine solche Weiterleitung jemals stattgefunden hat.

+0

Vielen Dank, das funktioniert super, die if-Funktion war das fehlende Stück. – dsaint

+0

@dasaint, cool, danke! Kannst du die Antwort auch akzeptieren? BTW, für die Zukunft möchten Sie vielleicht akzeptieren statt zu vergeben, denn jetzt ist diese QA nicht mehr auf der Bounty-Liste, so dass wir keine Upvotes mehr bekommen. :-( – cnst

+0

ich werde mir das merken. Danke. – dsaint