.htaccess File per il resto di noi

.i file htaccess sono usati per configurare Apache, così come una serie di altri server web. Nonostante il .htaccess estensione del tipo di file, sono semplicemente file di testo che possono essere modificati utilizzando qualsiasi editor di testo. In questo articolo, esamineremo ciò che sono e come li puoi utilizzare nei tuoi progetti.

Tieni presente che i file .htaccess non funzionano su sistemi basati su Windows, sebbene possano essere modificati e caricati su un server web compatibile, e su sistemi basati su Linux sono nascosti di default.

Per lavorare con i file htaccess localmente, per vedere come funzionano e generalmente giocare con loro, possiamo usare XAMPP (o MAMP) sul Mac - un pacchetto che installa e configura Apache, PHP e MySQL. Per modificare questi file .htaccess su Mac, dovremmo usare un editor di testo che consente l'apertura di file nascosti, come TextWrangler.

Un file .htaccess segue lo stesso formato del file di configurazione principale di Apache: httpd.conf. Molte delle impostazioni che possono essere configurate utilizzando il file di configurazione principale possono anche essere configurate con esse e viceversa.

Un'impostazione configurata in un file .htaccess sovrascriverà la stessa impostazione nel file di configurazione principale per la directory che contiene il file, così come tutte le sue sottodirectory.

A volte vengono definiti file di configurazione dinamici perché vengono letti dal server in ogni richiesta alla directory in cui sono contenuti. Ciò significa che qualsiasi modifica a un file .htaccess avrà effetto immediatamente, senza richiedere il riavvio del server, diversamente dalle modifiche apportate al file di configurazione globale. Significa anche che si paga un leggero calo di prestazioni per il loro utilizzo, ma possono essere utili quando non si ha accesso al file di configurazione principale del server.

Così ora sappiamo tutti quali sono i file .htaccess, come vengono modificati e utilizzati, e alcuni dei loro pro e contro, diamo un'occhiata a come possono essere utilizzati e ad alcune delle cose interessanti che possono fare.


Reindirizzamenti e riscrittura degli URL

Un uso popolare dei file .htaccess è eseguire reindirizzamenti o riscrivere gli URL. Questo può aiutare con la SEO a seguito di una modifica del nome di dominio o di una riorganizzazione della struttura dei file o può rendere l'URL lungo antiestetico più amichevole e memorabile.

reindirizzamenti

Un reindirizzamento può essere semplice come il seguente:

Reindirizza 301 ^ old \ .html $ http: //localhost/new.html

Questo imposta il codice di stato HTTP su 301 (spostato in modo permanente) e reindirizza tutte le richieste a old.html in modo trasparente a new.html. Usiamo un'espressione regolare per abbinare l'URL al reindirizzamento, che ci dà un buon grado di controllo per assicurare che solo l'URL corretto sia abbinato per il reindirizzamento, ma aggiunge complessità alla configurazione e amministrazione di esso. È richiesto l'URL completo della risorsa reindirizzata.

riscritture

Una regola di riscrittura può essere semplice come questa:

RewriteEngine su RewriteRule ^ old \ .html $ new.html

In questo esempio, forniamo semplicemente un semplice reindirizzamento di file da un file a un altro, che verrà eseguito anche in modo trasparente, senza modificare ciò che viene visualizzato nella barra degli indirizzi. La prima direttiva, RewriteEngine on, semplicemente assicura che il motore di riscrittura sia abilitato.

Per aggiornare ciò che viene visualizzato nella barra degli indirizzi del browser del visitatore, possiamo usare il R bandiera alla fine del RewriteRule per esempio.

RewriteRule ^ old \ .html $ http: //hostname/new.html [r = 301]

Il r flag causa un reindirizzamento esterno, motivo per cui viene fornito l'URL completo (un URL di esempio qui) alla nuova pagina. Possiamo anche specificare il codice di stato quando si usa il flag. Ciò causa l'aggiornamento della barra degli indirizzi nel browser del visitatore.

Uno dei possibili usi per la riscrittura degli URL che ho dato all'inizio di questa sezione era quello di rendere gli URL antiestetici (contenenti dati di stringhe di query) più amichevoli ai visitatori e ai motori di ricerca. Vediamo questo in azione ora:

RewriteRule ^ prodotti / ([^ /] +) / ([^ /] +) / ([^ /] +) product.php? Cat = $ 1 & brand = $ 2 & prod = $ 3

Questa regola consentirà ai visitatori di utilizzare un URL come prodotti / giradischi / Tecnica / SL1210, e l'hanno trasformato in Product.php? cat = giradischi &marchio = tecniche & prod = SL1210. Le parentesi tra le barre in avanti nell'espressione regolare precedente stanno catturando i gruppi: possiamo usare ognuno di questi come $ 1, $ 2 e $ 3 rispettivamente. Il [^ /]+ la classe di caratteri tra parentesi significa che corrisponde a qualsiasi carattere tranne una barra di avanzamento 1 o più volte.

In pratica, la riscrittura degli URL può essere (e in genere è) molto più complessa e ottenere cose molto più grandi di questa. La riscrittura dell'URL è spiegata meglio utilizzando interi tutorial, quindi non li esamineremo in nessun altro dettaglio qui.


Al servizio di pagine di errore personalizzate

Non è bello mostrare più la pagina 404 predefinita. Molti siti cogliere l'opportunità offerta da un file non trovato errore per iniettare un po 'di umorismo nel loro sito, ma per lo meno, le persone si aspettano che la pagina 404 di un sito corrisponda almeno allo stile e al tema di qualsiasi altra pagina del sito.

Molto vicino alla riscrittura degli URL, pubblicare una pagina di errore personalizzata invece della pagina standard 404 è facile con un file .htaccess:

ErrorDocument 404 "/404.html"

Questo è tutto ciò di cui abbiamo bisogno; ogni volta che si verifica un errore 404, viene visualizzata la pagina specificata. Possiamo configurare le pagine da visualizzare anche per molti altri errori del server.


Limitazione dell'accesso a risorse specifiche

Usando i file .htaccess, possiamo abilitare la protezione con password di qualsiasi file o directory, a tutti gli utenti, o in base a cose come dominio o indirizzo IP. Questo è in fin dei conti uno dei loro principali usi. Per impedire l'accesso a un'intera directory, creiamo semplicemente un nuovo file .htaccess, contenente il seguente codice:

AuthName "Nome utente e password richiesti" AuthUserFile /path/to/.htpasswd Richiedi utente valido AuthType Basic

Questo file dovrebbe quindi essere salvato nella directory che vogliamo proteggere. Il AuthName direttiva specifica il messaggio da visualizzare nella finestra di dialogo nome utente / password, il AuthUserFile dovrebbe essere il percorso del file .htpasswd. Il Richiedere direttiva specifica che solo gli utenti autenticati possono accedere al file protetto mentre il file AuthType è impostato per Di base.

Per proteggere un file specifico, possiamo avvolgere il codice sopra in a direttiva, che specifica il file protetto:

 AuthName "Nome utente e password richiesti" AuthUserFile /path/to/.htpasswd Richiedi utente valido AuthType Basic 

Abbiamo anche bisogno di un file .htpasswd per questi tipi di autenticazione, che contiene un elenco di nomi utente e password crittografati con due punti per accedere alle risorse protette. Questo file dovrebbe essere salvato in una directory non accessibile al web. Esistono numerosi servizi che possono essere utilizzati per generare automaticamente questi file poiché la password deve essere archiviata in forma crittografata.


Blocca l'accesso a determinate entità

Un altro uso dei file .htaccess consiste nel bloccare rapidamente e facilmente tutte le richieste da un indirizzo IP o da un utente-agente. Per bloccare un indirizzo IP specifico, aggiungi semplicemente le seguenti direttive al tuo file .htaccess:

consentire, negare negare da 192.168.0.1 consentire da tutti

Il ordine direttiva dice ad Apache in quale ordine valutare le direttive allow / deny. In questo caso, permettere viene valutato prima, quindi negare. Il permettere da tutti la direttiva viene valutata per prima (anche se appare dopo il negare direttiva) e tutti gli IP sono consentiti, quindi se l'IP del client corrisponde a quello specificato nel file negare direttiva, l'accesso è vietato. Ciò consente a tutti di escludere l'IP specificato. Si noti che possiamo anche negare l'accesso a interi blocchi IP fornendo un IP più breve, ad es. 192.168.

Per negare richieste basate su user-agent, potremmo fare questo:

RewriteCond% HTTP_USER_AGENT ^ OrangeSpider RewriteRule ^ (. *) $ Http: //% REMOTE_ADDR / $ [r = 301, l]

In questo esempio, qualsiasi client con a HTTP_USER_AGENT stringa che inizia con OrangeSpider (un cattivo bot) viene reindirizzato all'indirizzo da cui ha avuto origine. L'espressione regolare corrisponde a qualsiasi singolo carattere (.) zero o più volte (*) e reindirizza al % REMOTE_ADDR variabile d'ambiente. Il l il flag che abbiamo usato qui indica ad Apache di considerare questa corrispondenza come l'ultima regola, quindi non elaborerà nessun'altra prima di eseguire la riscrittura.


Forza una modalità di rendering IE

Accanto al controllo di come il server risponde a determinate richieste, possiamo anche fare cose al browser del visitatore, come forzare IE a renderizzare le pagine usando un motore di rendering specifico. Ad esempio, possiamo usare il mod_headers modulo, se presente, per impostare il X-UA-Compatible intestazione:

Set di intestazioni compatibile X-UA "IE = Edge"

Aggiungendo questa linea ad un file .htaccess istruirai IE ad usare la modalità di rendering più alta disponibile. Come dimostrato da HTML5 Boilerplate, possiamo anche evitare di impostare questa intestazione su file che non lo richiedono usando a direttiva in questo modo:

 Intestazione non impostata X-UA-Compatible 

Implementa la memorizzazione nella cache

Il caching è facile da configurare e può velocizzare il caricamento del tuo sito.

Il caching è facile da configurare e può velocizzare il caricamento del tuo sito. 'Nuff ha detto! Impostando una data futura scaduta su elementi di siti che non cambiano molto spesso, possiamo impedire al browser di richiedere risorse invariate a ogni richiesta.

Se esegui il tuo sito tramite Google PageSpeed ​​o Yahoo's YSlow e ricevi il messaggio sull'impostazione di intestazioni a scadenza futura, ecco come lo risolvi:

ExpiresActive su ExpiresActive su ExpiresByType image / gif "accesso più 1 mese" ExpiresByType image / png "accesso più 1 mese" ExpiresByType image / jpg "accesso più 1 mese" ExpiresByType image / jpeg "accesso più 1 mese" ExpiresByType video / ogg "accesso più 1 mese accesso "ExpiresByType audio / ogg" più 1 mese accesso "ExpiresByType video / mp4" più 1 mese "ExpiresByType video / webm" accesso più 1 mese "

Puoi aggiungere diversi ExpiresByType direttive per qualsiasi contenuto elencato nello strumento per le prestazioni che stai utilizzando o per qualsiasi altra cosa che desideri controllare nella cache. La prima direttiva, ExpiresActive on, assicura semplicemente che la generazione delle intestazioni di Expires sia attivata. Queste direttive dipendono dal fatto che Apache abbia il mod_expires modulo caricato.


Abilitazione della compressione

Un altro avvertimento che potremmo ottenere in un controllo delle prestazioni si riferisce all'abilitazione della compressione, e questo è anche qualcosa che possiamo correggere semplicemente aggiornando il nostro file .htaccess:

FilterDeclare COMPRESS FilterProvider COMPRESS DEFLATE risp = Content-Type $ text / html FilterProvider COMPRESS DEFLATE risp = Content-Type $ text / css FilterProvider COMPRESS DEFLATE risp = Content-Type $ text / javascript FilterChain COMPRESS FilterProtocol COMPRESS DEFLATE change = yes; byteranges = no

Questo schema di compressione funziona sulle versioni più recenti di Apache (2.1+) usando mod_filter modulo. Usa il SGONFIARE algoritmo di compressione per comprimere il contenuto in base al suo tipo di contenuto di risposta, in questo caso lo specifichiamo text / html, text / css e text / javascript (che sarà probabilmente il tipo di file contrassegnati in PageSpeed ​​/ Yslow comunque).

Nell'esempio precedente iniziamo dichiarando il filtro che desideriamo utilizzare, in questo caso COMPRIMERE, usando il FilterDeclare direttiva. Quindi elenchiamo i tipi di contenuto che desideriamo utilizzare questo filtro. Il FilterChain direttiva quindi ordina al server di creare una catena di filtri basata su FilterProvider direttive che abbiamo elencato. Il FilterProtocol direttiva ci consente di specificare le opzioni che vengono applicate alla catena di filtri ogni volta che viene eseguita, le opzioni che dobbiamo usare sono cambiamento = yes (il contenuto può essere modificato dal filtro (in questo caso, compresso)) e byteranges = no (il filtro deve essere applicato solo per completare i file).

Nelle versioni precedenti di Apache, il mod_deflate il modulo viene utilizzato per configurare la compressione di DEFLATE. Abbiamo un controllo minore su come il contenuto viene filtrato in questo caso, ma le direttive sono più semplici:

SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE testo / testo html / testo css / javascript

In questo caso, impostiamo semplicemente l'algoritmo di compressione usando SetOutputFilter direttiva, quindi specificare i tipi di contenuto che desideriamo comprimere utilizzando il comando AddOutputFilterByType direttiva.

Di solito il tuo server web userà uno di questi moduli a seconda della versione di Apache in uso. In genere, lo saprai in anticipo, ma se stai creando un file .htaccess generico che puoi utilizzare su una varietà di siti o che puoi condividere con altre persone e quindi non sai quali moduli potrebbero essere in uso, potresti voler utilizzare entrambi i blocchi di codice sopra riportati direttive in modo che venga utilizzato il modulo corretto e il server non genera un errore di 500 se proviamo a configurare un modulo che non è incluso. È necessario tenere presente che è anche relativamente comune per gli host che eseguono un numero elevato di siti da una singola casella per disabilitare la compressione in quanto vi è un piccolo calo delle prestazioni della CPU per la compressione sul server.


Sommario

Abbiamo esaminato alcuni degli usi più comuni dei file .htaccess e abbiamo esaminato come possiamo ottenere determinati compiti che, in qualità di costruttori / gestori del sito web, ci interessano in modo particolare. Come nel caso di qualsiasi tutorial introduttivo di questa natura, gli argomenti trattati sono presentati come introduzioni a un argomento specifico. Ci sono molte altre opzioni e configurazioni di quelle che siamo stati in grado di guardare, quindi consiglio vivamente di leggere ulteriormente su qualsiasi argomento che sia di particolare interesse.