Soluzione 1:
La tua opzione 1:
return 301 $scheme://$host$request_uri;
È esattamente quello che vuoi.
Non sono sicuro del perché il rewrite ^ http://$host$request_uri? permanent;
la riga risulterebbe in un 302 invece di 301. Questa è la sintassi corretta per costringerlo a restituire un 301.
Soluzione 2:
Tecnicamente, puoi usare entrambe le opzioni. Possono funzionare.
Secondo la documentazione di NGINX, usa return
se puoi . È più semplice e veloce perché NGINX interrompe l'elaborazione della richiesta (e non deve elaborare una regex). Inoltre, puoi specificare un codice nel 3xx serie:
return (301 | 302 | 303 | 307) url;
Se hai uno scenario in cui devi convalidare l'URL con una regex o hai bisogno di acquisire elementi nell'URL originale (che ovviamente non sono in una variabile NGINX corrispondente), allora dovresti usare rewrite
. Devi sapere che rewrite
restituisce solo il codice 301 o 302.
rewrite regex URL [flag];
Puoi leggere ulteriori informazioni su restituzione e riscrittura sul sito web di NGINX.