Apache aliasing e reindirizzamento

È comune che un client invii una richiesta per un file che non esiste sul server o che esiste in una posizione diversa. Ciò può verificarsi per una serie di motivi. È possibile spostare i file sul server (o su un server completamente diverso) oppure si consiglia di presentare una struttura di file system logica ai client di connessione.

Normalmente, queste azioni danno come risultato un messaggio di errore, ma le funzionalità di aliasing e di reindirizzamento di Apache, disponibili grazie a mod_alias modulo, consente di gestire questi scenari indirizzando i clienti alla nuova posizione della risorsa.

mod_alias consente inoltre di informare i clienti che l'URL richiesto non è corretto.

Gli alias consentono al server di prendere un URL e tradurlo in uno diverso. Quindi consegnano in modo trasparente la nuova risorsa al cliente, senza nemmeno rendersi conto che qualsiasi tipo di reindirizzamento ha avuto luogo. Questo può essere molto utile quando si cambiano i collegamenti del sito Web con URL amici.

Gli alias possono anche accedere ai file al di fuori della radice del documento pubblico mappando qualsiasi parte del file system nello spazio web, rendendoli visibili sul Web, ma non a determinati account di shell e script CGI, ad esempio. D'altra parte, a volte si desidera informare il client della nuova posizione del contenuto e chiedere loro di fare una nuova richiesta per quella posizione. È qui che entrano in gioco le direttive relative al reindirizzamento di Apache.


Direttiva alias

Il Alias direttiva prende un percorso URL e lo sostituisce senza interruzioni con un percorso file o directory sul sistema (cioè associa l'URL di una risorsa alla sua posizione fisica nel file system, indipendentemente dalla sua posizione):

Alias ​​/ images / / ftp / public / images /

Gli alias possono anche accedere ai file al di fuori della radice del documento pubblico.

L'esempio sopra mappa il /immagini/ Prefisso URL al / Ftp / public / images / prefisso di directory; quindi una richiesta a http://www.example-domain.com/images/example-image.jpg traduce automaticamente /ftp/public/images/example-image.jpg.

Nota che, se includi un finale / sul percorso dell'URL, quindi il server richiede un trailing / per espandere l'alias. Ad esempio, un percorso URL di /immagini non farà l'alias nell'esempio sopra. Allo stesso modo, omettendo la barra sul percorso URL, è necessario anche omettere la barra dal percorso del file.


Direttiva AliasMatch

Il AliasMatch direttiva funziona allo stesso modo di Alias, ma ti permette di usare espressioni regolari per abbinare un pattern URL con un percorso di file o directory. Le espressioni regolari fornite corrispondono all'URL richiesto:

AliasMatch /images/(.*)$ / ftp / public / images / $ 1

Questo esempio consente di fare riferimento in modo semplice e semplice a file di immagini da qualsiasi sottodirectory diretta sotto il percorso relativo del documento richiesto. Il $ 1 si riferisce al valore della stringa corrispondente nell'URL richiesto. Quindi, una richiesta di www.example-site.com/some_dir/images/img1.jpg mappe a /ftp/public/images/img1.jpg. Ciò consente inoltre di archiviare tutte le immagini in un'unica posizione, indipendentemente dalla loro posizione.

Una sottile differenza tra Alias e AliasMatch è questo Alias copia automaticamente qualsiasi parte aggiuntiva dell'URI alla fine del percorso del file sulla destra. AliasMatch non.

In altre parole, cambiando Alias a AliasMatch non avrà lo stesso effetto Come minimo, è necessario aggiungere ^ all'inizio dell'espressione regolare e $ fino alla fine e aggiungere $ 1 alla fine della sostituzione. Ad esempio, la seguente dichiarazione:

Alias ​​/ images / / ftp / public / images /

Non è equivalente a:

AliasMatch / images / / ftp / public / images /

Che invia tutte le richieste che contengono /immagini/ nell'URL a / Ftp / public / images /. Al fine di AliasMatch per ottenere gli stessi risultati, è necessario utilizzare quanto segue:

AliasMatch ^ / images /(.*)$ / ftp / public / images / $ 1

ScriptAlias ​​Directive

Il ScriptAlias direttiva esibisce la stessa funzionalità del Alias direttiva, ma contrassegna anche la directory di destinazione come una cartella con capacità CGI. Ovvero, Apache presuppone che tutti i file contenuti nella directory siano script CGI e tenterà di eseguire tali file come script CGI, quando riceve una richiesta per uno dei file.

Gli script CGI (Common Gateway Interface) sono fondamentalmente programmi esterni, stand-alone e generatori di contenuti, che ti permettono di creare contenuti dinamici per il tuo sito web.

ScriptAlias ​​/ cgi-bin / / usr / local / apache2 / cgi-bin /

L'esempio precedente causa una richiesta di http://www.example-site.com/cgi-bin/some_cgi_script per segnare il / Usr / local / apache2 / cgi-bin / directory come directory di script CGI, quindi eseguendo lo script / Usr / local / apache2 / cgi-bin / some_cgi_script. Questo ha lo stesso effetto della seguente configurazione alternativa:

Alias ​​/ cgi-bin / / usr / local / apache2 / cgi-bin /  SetHandler Opzioni cgi-script + ExecCGI 

ScriptAliasMatch Directive

Il ScriptAliasMatch direttiva si comporta in modo simile a ScriptAlias, ad eccezione del fatto che accetta un'espressione regolare come URL di origine invece di una semplice corrispondenza di prefisso.


Direttiva di reindirizzamento

mod_alias consente inoltre di informare i clienti che l'URL richiesto non è corretto, facendo in modo che il client effettui un'altra richiesta per una risorsa diversa. Questo è compiuto, usando il Reindirizzare direttiva.

Il Reindirizzare direttiva funziona in modo molto simile a Alias direttiva, eccetto che esegue il mapping di un dato prefisso URL a un URL diverso (che è fondamentalmente il motivo per cui il client è a conoscenza del reindirizzamento). Può anche accettare un optional stato discussione.

Reindirizza permanente / immagini http://www.another-example-site.com/images

Nell'esempio sopra, una richiesta di www.example-site.com/images/img1.gif reindirizzare a http://www.another-example-site.com/images/img1.gif.

Se l'URL della richiesta viene fornito con una stringa di query, la query viene lasciata intatta, a meno che non sia Reindirizzare direttiva specifica un URL di destinazione che specifica una nuova stringa di query.

Ad esempio, una richiesta di www.example-site.com/images?img-name=1.gif mapperà a http://www.another-example-site.com/images?img-name=1.gif nell'esempio sopra. Se, tuttavia, cambiamo la regola in:

Reindirizza permanente / immagini http://www.another-example-site.com/images?q=new-value

Quindi una richiesta per www.example-site.com/images?img-name=1.gif mapperà a http://www.another-example-site.com/images?q=new-value.

Gli alias consentono al server di acquisire un URL e tradurlo in un URL diverso.

Quando si esegue un reindirizzamento, il server invia una risposta HTTP con un codice di stato specifico per il tipo di reindirizzamento (a differenza di un 200 o 404, ad esempio).

Il Reindirizzare direttiva consente di specificare uno dei seguenti codici di stato (i corrispondenti nomi simbolici sono tra parentesi), quindi restituito insieme alla risposta:

I reindirizzamenti vengono elaborati prima degli alias, se vengono trovati nello stesso contesto.

  • 301 (permanente): la risorsa è stata spostata in modo permanente in una nuova posizione. I client con cache e proxy devono aggiornare i propri dati per puntare al nuovo URI, a meno che non sia a Cache-Control o Scade l'intestazione di risposta indica diversamente. Questo stato indica anche ai proxy di eseguire automaticamente il reindirizzamento da soli per le richieste future senza tornare al server.
  • 302 (temp): la risorsa è stata temporaneamente spostata in una nuova posizione. I client con cache e proxy non devono aggiornare i propri dati, ma devono continuare a utilizzare lo stesso URL per le richieste future, a meno che Cache-Control o Scade l'intestazione di risposta indica diversamente. Questo stato indica anche ai proxy di verificare con il server prima di eseguire il reindirizzamento per le richieste future.
  • 303 (seeother): la risposta può essere trovata sotto un altro URL e deve essere recuperata utilizzando una richiesta GET, indipendentemente dal metodo di richiesta originale utilizzato. Questo indica che la risorsa è stata sostituita.
  • 410 (andato): la risorsa non è più disponibile; è stato rimosso definitivamente.

Se la stato l'argomento è omesso, verrà assunto uno stato HTTP 302 predefinito (reindirizzamento temporaneo).

Ovviamente, è possibile utilizzare qualsiasi stato (valido!) HTTP diverso dai quattro elencati sopra, ma, in tal caso, sarà necessario utilizzare i corrispondenti valori del codice di stato perché mod_alias definisce solo nomi simbolici per i suddetti tipi di reindirizzamento. Se si utilizza un codice di stato che non è compreso nell'intervallo 300-399, il secondo argomento dell'URL (ovvero l'URL di sostituzione) deve essere omesso.


Direttiva RedirectMatch

RedirectMatch funziona allo stesso modo del Reindirizzare direttiva, ma, come probabilmente avete indovinato, usa un'espressione regolare invece di un prefisso come l'URL di origine. Questo ti dà un mezzo più flessibile per abbinare gli URL.

Ad esempio, per reindirizzare tutte le richieste di immagini GIF a un altro server, è possibile utilizzare la seguente regola:

RedirectMatch (. *) \. Gif $ http: //www.example-site.com$1.gif

E come Reindirizzare, RedirectMatch consente di utilizzare un argomento di stato per specificare il tipo di reindirizzamento. Poiché l'esempio precedente non imposta esplicitamente un parametro di stato, viene assunto un reindirizzamento temporaneo (302).

Hai anche altre due direttive, vale a dire: RedirectPermanent e RedirectTemp, entrambi funzionano allo stesso modo di Reindirizza permanente ... e Reindirizza temp ... , rispettivamente.


Ordine di elaborazione della direttiva

Per evitare risultati imprevisti, è importante notare che tutti i reindirizzamenti vengono elaborati prima degli alias, se vengono trovati nello stesso contesto (ad esempio, lo stesso o contenitore).

Se un server riceve una richiesta che corrisponde a Reindirizzare o RedirectMatch direttiva, applicherà tale reindirizzamento prima di elaborare qualsiasi alias.

Ciò significa che, se si dispone di alias di corrispondenza già configurati, non avranno mai la possibilità di applicare, perché il reindirizzamento necessario si sarà già verificato.

In secondo luogo, alias e reindirizzamenti vengono applicati nell'ordine in cui appaiono nei file di configurazione del server (prima in, prima elaborati). Per questo motivo, assicurati di elencare prima la regola più specifica. Ad esempio, la seguente configurazione:

Alias ​​/ sub-dir1 / sub-dir2 / dir3 Alias ​​/ sub-dir1 / dir4

Ha un effetto diverso da:

Alias ​​/ sub-dir1 / dir4 Alias ​​/ sub-dir1 / sub-dir2 / dir3

Dove Alias ​​/ sub-dir1 / dir4 corrisponderà sempre prima Alias ​​/ sub-dir1 / sub-dir2 / dir3.


Conclusione

Oggi, abbiamo esaminato le capacità e le opzioni che hai con mod_alias, consentendoti di eseguire facilmente e rapidamente semplici attività di mappatura URL e di reindirizzamento con il minimo sforzo. È un'utilità eccezionale e leggera che consente di svolgere il lavoro senza problemi e con un consumo minimo di risorse.

Il prossimo post della serie sarà revisionato mod_rewrite, uno strumento molto potente e flessibile utilizzato per la gestione degli URL. mod_rewrite consente di specificare un numero illimitato di regole e condizioni, tra cui variabili del server, variabili di ambiente, intestazioni HTTP, ricerche nel database e molto altro ancora per controllare la manipolazione degli URL a un livello completamente diverso. Rimanete sintonizzati!