Řešení 1:
Vaše možnost 1:
return 301 $scheme://$host$request_uri;
Je přesně to, co chcete.
Nejste si jisti, proč rewrite ^ http://$host$request_uri? permanent;
řádek by vedl k 302 místo 301. To je správná syntaxe, která přinutí vrátit 301.
Řešení 2:
Technicky můžete použít obě možnosti. Mohou fungovat.
Podle dokumentace NGINX použijte return
pokud můžete . Je to jednodušší a rychlejší, protože NGINX přestane zpracovávat požadavek (a nemusí zpracovávat regulární výraz). Více než to, můžete zadat kód v 3xx série:
return (301 | 302 | 303 | 307) url;
Pokud máte scénář, kdy potřebujete ověřit adresu URL pomocí regulárního výrazu nebo potřebujete zachytit prvky v původní adrese URL (které samozřejmě nejsou v odpovídající proměnné NGINX), měli byste použít rewrite
. Musíte vědět, že rewrite
vrátí pouze kód 301 nebo 302.
rewrite regex URL [flag];
Více o návratu a přepsání si můžete přečíst na webu NGINX.