Nginx

Come utilizzare la riscrittura degli URL

Come utilizzare la riscrittura degli URL
La riscrittura dell'URL è un processo di modifica dell'URL della richiesta in qualcos'altro come definito nel server web. Nginx utilizza il modulo ngx_http_rewrite_module, che utilizza principalmente le direttive return, rewrite per scopi di riscrittura. Oltre a queste direttive definite in questo modulo, la direttiva map, definita in ngx_http_map_module, può essere utilizzata anche per riscrivere gli URL con facilità. Questa guida intende spiegare circa 2 direttive principali: restituire, riscrivere e i loro flag, come funzionano e le loro applicazioni.

Prerequisiti

Questa guida è ottimizzata per Nginx 1.0.1 e versioni successive, quindi si consiglia vivamente di aggiornare l'istanza di Nginx esistente alla versione suddetta o successiva. Tuttavia, alcuni dei comandi, le sintassi potrebbero ancora funzionare per qualsiasi versione precedente alla suddetta versione. Poiché questa guida riguarda la riscrittura degli URL, che è un argomento un po' avanzato, presuppone che il pubblico sia a conoscenza della procedura di installazione di Nginx e quindi non è spiegata qui.

Ritorno

Return è la direttiva di base che esegue la riscrittura dell'URL ed è semplice da capire. Non usa espressioni regolari, ma può includere variabili da analizzare, catturate dal percorso del blocco di posizione. Di solito, la direttiva return viene utilizzata per reindirizzare l'URL della richiesta a una posizione diversa e quindi utilizza spesso codici HTTP come 301 per il reindirizzamento permanente e 302 per il reindirizzamento temporaneo. I seguenti frammenti di codice dimostrano alcuni dei casi d'uso della direttiva return.

Il seguente frammento di codice reindirizza l'URL della richiesta a Google.come. Può essere utilizzato direttamente sotto il blocco del codice del server o sotto un blocco del codice della posizione, ma assicurati di non reindirizzare allo stesso dominio per evitare il ciclo di reindirizzamento

ritorna 301 https://google.com;

Il seguente frammento di codice reindirizza l'URL della richiesta a Nucuta.com insieme al percorso, ad esempio il suddetto esempio non contiene alcun percorso, parametri, e quindi qualunque URL sia digitato nella barra degli indirizzi, la richiesta viene reindirizzata al dominio radice di Google, mentre nell'esempio seguente, il percorso, insieme ai parametri vengono riportati senza il nome di dominio. In alternativa, è possibile utilizzare $is_args$args, ma al posto di $request_uri, la variabile $uri dovrebbe essere utilizzata poiché $request_uri contiene anche i parametri dell'URL. Se il requisito è reindirizzare a una directory diversa dello stesso dominio, utilizzare la variabile $host invece del nome di dominio nella direttiva return, ad esempio nell'esempio seguente invece di nucuta.com, usa $host.

ritorno 301 https://nucuta.com$request_uri;

Il seguente frammento di codice reindirizza la richiesta in entrata alla directory del percorso dello stesso dominio e allo schema, ovvero se viene utilizzato il seguente frammento di codice in http://Linux.com, e se un visitatore ha fatto una richiesta ad esso, viene reindirizzato alla directory del percorso, e quindi il seguente frammento di codice è utile quando si gestisce un gran numero di siti web. Qui $scheme definisce il protocollo dell'URL, come FTP, HTTP, HTTPS e $host definisce il dominio del server corrente con la sua estensione di dominio, come Google.com, Linux.Rete ecc. Poiché questo non esegue alcun reindirizzamento del protocollo, ad esempio da HTTP a HTTP, deve essere eseguito manualmente come nel secondo esempio.

return 301 $scheme://$host/percorso;
if ($schema != "https")
restituisce 301 https://$host$request_uri;

Un altro caso d'uso utile della direttiva return è la possibilità di includere variabili regex, ma per questo l'espressione regolare dovrebbe essere specificata nel blocco posizione e dovrebbe catturare un pattern, quindi il pattern catturato può essere combinato con l'URL esistente nella direttiva return a scopo di reindirizzamento, ad esempio nell'esempio seguente, quando viene effettuata una richiesta per accedere a un file di testo, acquisisce il nome del file di testo nel blocco posizione, quindi passa quel nome alla direttiva return, quindi la direttiva return lo combina con l'esistente URL per reindirizzare la richiesta a un'altra directory.

posizione ~* ^/([^/]+.txt)$
restituisce 301 /chrome/$1;

Riscrivere

Rewrite è una direttiva utilizzata per riscrivere gli URL internamente nel server Web senza esporre il meccanismo sottostante al lato client. Secondo la sua sintassi, è usato con le espressioni regolari. La sintassi di base è la seguente. Il segnaposto regex serve per l'utilizzo di espressioni regolari, il segnaposto sostitutivo serve per sostituire l'URL corrispondente, mentre il flag serve per manipolare il flusso dell'esecuzione. Al momento, i flag utilizzati nella direttiva di riscrittura sono break, permanenti, redirect e last.

riscrivi sostituzione regex [flag];

Prima di procedere con le espressioni regolari, le sostituzioni, l'acquisizione di pattern e la variabile, è importante sapere come i flag fanno comportare il motore interno di Nginx. Ci sono quattro principali flag utilizzati con la direttiva di riscrittura come spiegato in precedenza, tra cui i flag di reindirizzamento permanenti possono essere accoppiati insieme poiché entrambi eseguono la stessa funzionalità, il che significa il reindirizzamento.

Reindirizzare

Il flag di reindirizzamento viene utilizzato per segnalare al browser che il reindirizzamento è temporaneo, il che è utile anche nei crawler dei motori di ricerca per riconoscere che la pagina è stata temporaneamente spostata e verrà ripristinata nella sua posizione originale qualche tempo dopo. Quando la pagina segnala che è 302, i motori di ricerca non apportano alcuna modifica alla sua indicizzazione e quindi i visitatori continuano a vedere la pagina originale nell'indice del motore di ricerca durante la ricerca, il che significa che la vecchia pagina non viene rimossa e, inoltre, tutti i , come il page rank, il link juice non vengono passati alla nuova pagina.

Posizione /

riscrivi ^ http://155.138.XXX.XXX/reindirizzamento percorso;

Permanente

Il flag permanente viene utilizzato per segnalare al browser che il reindirizzamento è permanente, il che è utile anche nei crawler dei motori di ricerca per riconoscere che la pagina è stata spostata in modo permanente e NON verrà ripristinata nella sua posizione originale qualche tempo dopo come con lo spostamento temporaneo. Quando la pagina segnala che è 301, i motori di ricerca apportano alcune modifiche alla sua indicizzazione e quindi i visitatori vedono la nuova pagina nell'indice del motore di ricerca invece della vecchia pagina durante la ricerca, il che significa che la vecchia pagina viene sostituita con la nuova pagina, inoltre, tutto i qualificati, come il page rank, il link juice vengono passati alla nuova pagina.

Posizione /

riscrivi ^ http://155.138.XXX.XXX/percorso permanente;

Espressione regolare, acquisizione di pattern e variabili.

Nginx utilizza pesantemente l'espressione regolare con la direttiva di riscrittura, quindi conoscere le espressioni regolari è utile in questo segmento.  Esistono diversi tipi di espressioni regolari, ma Nginx utilizza le espressioni regolari compatibili con Perl alias PCRE. Avere uno strumento di test delle espressioni regolari è utile per assicurarsi che il modello scritto funzioni effettivamente in anticipo utilizzandolo nel file di configurazione di Nginx. Questa guida consiglia https://regex101.com/ come strumento e tutti i seguenti esempi sono testati accuratamente con il suddetto strumento.

Espressioni regolari

riscrivi ^/fr/(.*)$ http://nucuta.com/$ 1 permanente;

Un tipico modello di direttiva di riscrittura va come sopra, contiene la direttiva di riscrittura all'inizio, quindi con uno spazio il "modello" in espressione regolare, quindi con uno spazio la "sostituzione", quindi infine il "flag". La direttiva rewrite può essere posizionata ovunque all'interno delle parentesi del server, ma si consiglia di mantenerla dopo aver specificato le direttive listen, server_name, root e index. Quando un visitatore effettua una richiesta al server, viene inviato un URL insieme alla richiesta, quindi se l'URL corrisponde al modello di espressione regolare specificato nella direttiva rewrite, viene riscritto in base alla sostituzione, quindi il flusso di esecuzione viene manipolato in base sulla bandiera.

Il pattern dell'espressione regolare utilizza le parentesi per indicare il gruppo, la cui sottostringa viene estratta dall'URL dopo aver abbinato il pattern regex all'URL della richiesta, quindi quella sottostringa estratta dall'URL viene assegnata alla variabile nel "sostituzione" della direttiva di riscrittura. Se ci sono più gruppi abbinati, la sottostringa di ogni gruppo abbinato è assegnata alle variabili in "sostituzione" in ordine numerabile, il che significa che la sottostringa del primo gruppo abbinato è assegnata alla prima variabile ($1), sottostringa del il secondo gruppo corrispondente è assegnato alla seconda variabile ($2) e così via.

Su 4 flag, 2 flag sono già stati spiegati in questa guida, i restanti sono gli ultimi e si rompono. Prima di capire come funzionano i flag rimanenti, è importante capire come si comporta il motore Nginx con le direttive di riscrittura. Quando un URL viene inviato insieme a una richiesta, il motore Nginx cerca di abbinarlo a un blocco di posizione. Che sia abbinato o meno, se una direttiva come rewrite, return viene imbattuta, viene eseguita in sequenza. Se l'URL inviato corrisponde al modello di una direttiva di riscrittura, il motore Nginx esegue l'intero file di configurazione, indipendentemente da dove la direttiva di riscrittura è specificata come un ciclo, fino a quando l'URL appena riscritto non corrisponde a uno dei blocchi di posizione.

Il seguente URL viene utilizzato come dimostrazione per spiegare come entrambi i flag fanno sì che il flusso di esecuzione del motore Nginx si comporti con la direttiva di riscrittura. La seguente schermata ritrae la struttura dei file del server web.

http://155.138.XXX.XXX/browser/campione.txt (l'URL inviato come richiesta)

Quando non viene utilizzata alcuna bandiera

Quando non viene utilizzato alcun flag, entrambe le direttive di riscrittura vengono eseguite in sequenza; quindi il primo URL nell'elenco seguente diventa 2nd, poi 2nd L'URL diventa l'ultimo URL Quindi quando il campione.txt nella cartella del browser è richiesto, il server web serve effettivamente il campione.txt nella cartella principale. Poiché la riscrittura dell'URL è completamente astratta dal browser, non vede alcuna differenza nel servire rispetto alla direttiva return che indica al browser se la richiesta è stata reindirizzata o meno con un numero HTTP.

  1. http://155.138.XXX.XXX/browser/campione.TXT
  2. http://155.138.XXX.XXX/cromo/campione.TXT
  3. http://155.138.XXX.XXX/campione.TXT
Posizione /

riscrivi ^/browser/(.*)$ /cromo/$1;
riscrivi ^/chrome/(.*)$ /$1;
posizione /cromo
try_files $uri $uri/ =404;

Quando viene specificato Break o Last Flag al di fuori del blocco di posizione Location

Quando viene specificato break o last flag al di fuori del blocco posizione, le direttive di riscrittura dopo la direttiva di riscrittura corrispondente non vengono affatto analizzate, ad esempio nell'esempio seguente l'URL di richiesta viene riscritto nel 2nd uno nell'elenco seguente indipendentemente dal flag utilizzato, e il gioco è fatto.

  1. http://155.138.XXX.XXX/browser/campione.TXT
  2. http://155.138.XXX.XXX/cromo/campione.TXT
Posizione /

riscrivi ^/browser/(.*)$ /chrome/$1 last;#break
riscrivi ^/chrome/(.*)$ /$1 ultimo;#break
posizione /cromo
try_files $uri $uri/ =404;

Quando viene utilizzata l'ultima bandiera all'interno di un blocco di posizione

Quando l'ultimo flag viene utilizzato all'interno di un blocco di posizione, smette di analizzare più direttive di riscrittura all'interno di quel particolare blocco di posizione e si tuffa nel blocco di posizione di riscrittura successivo se l'URL riscritto corrisponde al percorso di quel blocco di posizione, quindi esegue il successiva direttiva di riscrittura al suo interno.

  1. http://155.138.XXX.XXX/browser/campione.TXT
  2. http://155.138.XXX.XXX/cromo/campione.TXT
  3. http://155.138.XXX.XXX/campione.TXT
Posizione /
riscrivi ^/browser/(.*)$ /chrome/$1 ultimo;

posizione /cromo
riscrivi ^/chrome/(.*)$ /$1 ultimo;
try_files $uri $uri/ =404;

Quando viene utilizzato il flag di interruzione all'interno di un blocco di posizione

Break flag, d'altra parte, quando si trova all'interno di un blocco di posizione, interrompe l'analisi di più direttive di riscrittura, indipendentemente da dove si trovano, quando una direttiva di riscrittura viene abbinata all'URL di richiesta e fornisce il contenuto all'utente.

Posizione /
riscrivi ^/browser/(.*)$ /chrome/$1 pausa;

posizione /cromo
riscrivi ^/chrome/(.*)$/$1 pausa;
try_files $uri $uri/ =404;

Conclusione

La riscrittura degli URL è un processo di riscrittura degli URL all'interno di un server web. Nginx fornisce più direttive come return, rewrite, map per renderlo possibile. Questa guida mostra cosa sono le direttive di ritorno e di riscrittura e come vengono utilizzate per riscrivere facilmente gli URL. Come dimostrato negli esempi, la direttiva return è adatta per segnalare al browser e il motore di ricerca crawler dove si trova la pagina, mentre la direttiva rewrite è utile per astrarre il processo di riscrittura dell'URL senza far sapere al browser cosa sta succedendo dietro le quinte. Questo è molto utile nel servire il contenuto tramite un CDN, un server memorizzato nella cache o da una posizione diversa all'interno della rete. Gli utenti non sanno mai da dove proviene la risorsa poiché il browser mostra solo l'URL fornito loro.

Come installare League Of Legends su Ubuntu 14.04
Se sei un fan di League of Legends, questa è un'opportunità per testare League of Legends. Nota che LOL è supportato su PlayOnLinux se sei un utente L...
Installa l'ultimo gioco di strategia OpenRA su Ubuntu Linux
OpenRA è un motore di gioco di strategia in tempo reale gratuito/libero che ricrea i primi giochi di Westwood come il classico Command & Conquer: Red ...
Installa l'ultimo Dolphin Emulator per Gamecube e Wii su Linux
L'emulatore Dolphin ti consente di giocare ai giochi Gamecube e Wii scelti su Personal Computer Linux (PC). Essendo un emulatore di giochi liberament...