La guida definitiva ai file .htaccess

I file di configurazione .htaccess di Apache hanno sconcertato innumerevoli sviluppatori. Questo tutorial mira a superare questa confusione concentrandosi su esempi e descrizioni approfondite. Tra i vantaggi dell'apprendimento della configurazione di .htaccess c'è il gzipping automatico dei tuoi contenuti, che fornisce URL più amichevoli, che impediscono il collegamento a caldo, il miglioramento del caching e altro.

Alla ricerca di una soluzione rapida?

Questo articolo ti insegnerà a configurare manualmente i tuoi file .htaccess, ma se vuoi una soluzione semplice e veloce, prova a scaricare .htaccess Builder da Envato Market. Ti consente di consegnare rapidamente e senza sforzo un file htaccess senza dover ricordare nulla del linguaggio del server Apache utilizzato per costruire il file htaccess!

.htaccess Builder su Envato Market

Introduzione:

Ho letto un numero di articoli .htaccess online. Ammetterò spudoratamente
Non sono andato oltre la prima pagina dei risultati di Google. Sono rimasto scioccato quando
In realtà ho letto gli articoli e ho scoperto che nessuno di loro ha spiegato cosa fosse effettivamente Apache
facendo. Erano semplicemente una raccolta di trucchi popolari o utili o
snippet di codice riutilizzabile. Va tutto bene, ma il classico
argomento è:

"Dai a un uomo un pesce e lui mangerà per un giorno. Insegna a un uomo a pescare e lui
mangerà per tutta la vita ".
- Confucio

In questo articolo ho intenzione di provare non solo a mostrarti degli esempi utili
.direttive htaccess, ma spiega esattamente cosa è
andando avanti. In questo modo, capirai i principi fondamentali e potrai quindi estendere il
esempi o creare nuovi comandi per il proprio uso in qualsiasi modo creativo o utile
puoi venire con.

Il mio focus sarà su Apache 2, tuttavia gran parte di ciò si applicherà
ad Apache 1.3 e proverò a sottolineare le differenze che conosco.

Infine, questo tutorial avrà più senso se lo leggi in ordine.
Cerco di legare insieme i miei esempi e di costruirli, in questo modo
modo che tu possa provarli tu stesso e seguirli.

Cos'è .htaccess ?:

Per citare Apache:

.i file htaccess (o "file di configurazione distribuiti") forniscono un modo per fare
modifiche di configurazione su base per directory. Un file, contenente uno o più
direttive di configurazione, è collocato in una particolare directory di documenti e il
le direttive si applicano a quella directory e a tutte le sue sottodirectory.

direttive

"Direttive" è la terminologia utilizzata da Apache per i comandi di Apache
file di configurazione. Normalmente sono comandi relativamente brevi
coppie di valori chiave, che modificano il comportamento di Apache. Un file .htaccess consente
sviluppatori di eseguire una serie di queste direttive senza che sia necessario l'accesso
Il file di configurazione del server principale di Apache, spesso denominato httpd.conf.
Questa vita,
httpd.conf, viene generalmente chiamato "file di configurazione globale" e lo farò
fare riferimento ad esso con quel nome o il suo equivalente nome breve.

Questa funzione è ideale per molte società di hosting che implementano un hosting condiviso
ambiente. La società di hosting non permetterà ai suoi clienti di accedere a
file di configurazione globale, che in definitiva influisce su tutti i clienti ospitati su
quel server. Invece, abilitando .htaccess, danno a ciascuno dei loro clienti
il potere di specificare ed eseguire le proprie direttive Apache nella propria
directory e sottodirectory. Ovviamente è anche utile per il singolo
sviluppatore, come vedrai.

Vale la pena ricordare che tutto ciò che può essere fatto con un file .htaccess può
essere fatto nel file httpd.conf. però, NON tutto ciò che può essere fatto in
httpd.conf può essere fatto in un file .htaccess. In effetti i file .htaccess devono essere
abilitato nel file httpd.conf per poter essere eseguito a tutti. Una volta abilitato,
il loro potere può essere limitato a certi "contesti" in modo che possano essere autorizzati
per sovrascrivere alcune impostazioni ma non altre. Questo dà agli amministratori di sistema
più controllo su ciò che lasciano gli altri sviluppatori a farla franca
.file htaccess.

Abilitazione .htaccess:

.i file htaccess sono normalmente abilitati di default. Questo è effettivamente controllato
dalla direttiva AllowOverride nel file httpd.conf. Questa direttiva
può essere inserito solo all'interno di a sezione. Non lasciare che questo confonda
tu. Il tipico file httpd.conf definisce DocumentRoot e la maggioranza
del file conterrà direttive all'interno di a sezione che tratta
con quella directory. Questo include la direttiva AllowOverride.

Il valore predefinito è in realtà "Tutti" e quindi i file .htaccess sono abilitati da
predefinito. Un valore alternativo sarebbe "Nessuno", il che significherebbe che lo sono
completamente disabilitato. Esistono numerosi altri valori che limitano la sola configurazione
determinati contesti. Alcuni sono:

  • AuthConfig - Direttive di autorizzazione come quelle che si occupano di autenticazione di base.
  • FileInfo - Direttive che riguardano l'impostazione di intestazioni, documenti di errore, cookie, riscrittura dell'URL e altro.
  • Indici - Personalizzazioni di elenchi di directory predefinite.
  • Limite: controlla l'accesso alle pagine in diversi modi.
  • Opzioni - Accesso simile agli indici ma include anche
    più valori come ExecCGI, FollowSymLinks, Include e altro ancora.

Full. Htaccess Overriding

Mostrerò alcuni esempi, senza il loro corrispondente sezioni.
Ecco un esempio che consente la sovrascrittura completa di .htaccess:

# Consenti ai file .htaccess la loro piena potenza AllowOverride All

Override limitato

Ed ecco un esempio che accetta un approccio a grana più fine e consente solo
sovrascrittura dei contesti di autorizzazione e degli indici ma nient'altro:

# Consenti solo ai file .htaccess di sovrascrivere Autorizzazione e indici AllowOverride AuthConfig Indexes

Commenti

La prima riga in entrambi questi esempi sono i commenti Apache. I commenti iniziano
con il simbolo "#". Questo è comune a molti file di configurazione e script
le lingue. Avrò molti commenti nei miei esempi per aiutare a spiegare cosa fanno le cose.
Tuttavia, non sono richiesti, ed è davvero solo una preferenza personale su quanto tu
voglio commentare. I commenti non sono richiesti.

La seconda riga è la direttiva AllowOverride stessa. Questa è la consueta sintassi di un
Direttiva Apache. Prima c'è il nome della direttiva "AllowOverride" seguito da uno spazio
elenco separato di valori. Sebbene questa sintassi sia piuttosto allentata; stai sempre attento.

A volte anche un singolo errore nel tuo file httpd.conf o .htaccess risulterà a
fusione temporanea del server, e gli utenti vedranno 500 - Pagine interne di errore del server.

Solo per questo motivo, è buona norma eseguire sempre un backup dei file httpd.conf e .htaccess prima di apportare una modifica o un'aggiunta. In questo modo, se qualcosa va storto con una modifica, lo avrai
nulla di cui preoccuparsi, perché è possibile ripristinare la versione precedente funzionante. Lo farò
incoraggia anche a fare piccole modifiche alla volta e verificare che le modifiche funzionino
aumenta rispetto a fare un certo numero di modifiche contemporaneamente.
In questo modo, se lo fai
un errore, sarà molto più facile rintracciare ciò che potrebbe averlo causato.

Se sei mai confuso sulla sintassi di qualsiasi direttiva, vai immediatamente su
Direttiva Apache che elenca e rivede la "Sintassi" che hanno elencato nella tabella
per ogni singola direttiva. Farò del mio meglio per cercare di spiegarlo qui
(Sto cercando di insegnare) ma la mia spiegazione non può mai essere buona come la
documentazione tecnica formale stessa. Non abbiate mai paura della documentazione, lo è
il tuo riferimento più affidabile e affidabile. Proverò a rendere le cose più interessanti
qui (woohoo!), ma alla fine, sto solo facendo un giro diverso su quei documenti.

Verifica se .htaccess è abilitato:

È possibile, anzi, è estremamente probabile che la tua società di hosting non lo faccia
darti accesso al file httpd.conf. Quindi, come fai a sapere se il supporto .htaccess è abilitato
o no? Non preoccuparti, .htaccess è una funzionalità molto comune e utile che la maggior parte delle aziende farà
hai abilitato o abilitato se lo chiedi educatamente.

La cosa migliore da fare sarebbe semplicemente controllare con la tua compagnia di hosting. Se non è esplicitamente
elencato ovunque nel tuo piano di hosting, quindi spara al loro supporto un'email. Questo è relativamente comune
domanda quindi probabilmente hanno già una risposta pronta per te. Saranno probabilmente disposti
per abilitare il servizio o almeno dare una ragione per cui potrebbero non permetterlo.

In ogni caso, puoi sempre dare un colpo e vedere se funziona un semplice file .htaccess!
Nel download di esempio di questo tutorial sono inclusi due metodi che puoi controllare per vedere se .htaccess
il supporto è abilitato. Le due cartelle sono "is_htaccess_enabled" e "is_htaccess_enabled_2".
Dagli un colpo, spiegherò cosa sta facendo ognuno di loro qui.

is_htaccess_enabled

Questo test case è molto semplice. Usa una direttiva per far apparire Apache
prima per l'indicegood.html "file before" index.html. "Se il supporto .htaccess è
abilitato, quando si punta il browser alla cartella, Apache caricherà il file .htaccess e lo saprà
dovrebbe mostrare "l'indice"
good.html "pagina contenente un messaggio verde che dice Congratulazioni!
Se il supporto .htaccess non è abilitato, Apache, per impostazione predefinita, ignorerà il file .htaccess
file e cerca immediatamente un file index.html.

# Questa Direttiva farà apparire Apache al primo posto per "index_good.html" prima di cercare "index.html" DirectoryIndex index_good.html index.html

DirectoryIndex

La direttiva DirectoryIndex accetta un elenco separato di spazi di potenziali nomi di file.
Quando ad Apache viene dato un URL di una directory, e non una pagina diretta (per esempio
http://www.example.com e non http://www.example.com/index.html) Apache userà questo
elenco di file per cercare la pagina corretta da caricare. Apache cercherà i file
utilizzando i valori nell'elenco da sinistra a destra. Il primo file che Apache vede esiste
sarà il file che carica e visualizza al client.

Usando il file .htaccess sopra, ecco un esempio dei casi buoni (abilitati) e cattivi (disabilitati):

is_htaccess_enabled_2

Come ho detto prima, un errore di sintassi nel tuo file .htaccess causerà il singhiozzo del server.
Puoi usare questo a tuo vantaggio per verificare se il tuo server ha il supporto .htaccess abilitato!
Ecco un esempio di un file .htaccess che è destinato a far saltare in aria.

# Questo file ha lo scopo di far esplodere Apache. Questo aiuterà # a determinare se .htaccess è abilitato o meno! AHHHHHHH

È abbastanza chiaro che "AHHHHHHH" non è una direttiva Apache valida. Questo causerà
un errore se Apache prova a leggere il file .htaccess! Quindi, se torni indietro una pagina che urla
"Errore interno del server", quindi il tuo server sta cercando i file .htaccess! Se tu in realtà
vedere il contenuto del file index.html, quindi è probabile che siano stati disabilitati. Ecco di nuovo i casi buoni e cattivi:

AccessFileName

Infine, è ancora possibile che il supporto di .htaccess sia ancora abilitato, solo con
impostazioni uniche. Gli amministratori di sistema possono modificare semplicemente il nome del file .htaccess
come abbiamo cambiato il nome del file di default che Apache cerca. Questo è possibile da
utilizzando AccessFileName
direttiva nel file di configurazione globale. Ancora una volta, la cosa migliore da fare in questo caso sarebbe
contattare la società di hosting per ulteriori informazioni.

Conseguenze dei file .htaccess:

Prima di entrare in alcune delle cose interessanti che puoi fare con i file .htaccess, devo farlo
ti dico in cosa stai andando. Come ho detto prima, stai permettendo
sovrascrivere le impostazioni del server per una directory e tutte le sue sottodirectory. Sempre
tieni presente che stai influenzando tutte le sottodirectory e le attuali
elenco.

Inoltre, se abilitato, il server subirà un potenziale impatto sulle prestazioni. Il motivo è perché, ogni richiesta del server, se il supporto .htaccess è abilitato, quando Apache va a recuperare il file richiesto per il client, deve cercare un file .htaccess in ogni singola directory fino a dove il file è memorizzato.

Questo significa un certo numero di cose. Innanzitutto perché Apache cerca sempre i file .htaccess
a ogni richiesta, qualsiasi modifica al file avrà immediatamente effetto.
Apache non li memorizza nella cache e vedrà immediatamente le modifiche alla richiesta successiva.
Tuttavia, questo significa anche che Apache dovrà fare del lavoro extra per ogni richiesta.
Ad esempio, se un utente richiede /www/supercool/test/index.html, quindi il tuo server
controllerebbe i seguenti file .htaccess:

/www/.htaccess /www/supercool/.htaccess /www/supercool/test/.htaccess

Questi potenziali accessi ai file (potenziale perché i file potrebbero non esistere) e loro
l'esecuzione (se esistessero) richiederà tempo. Ancora una volta, la mia esperienza è che lo è
impercettibile e non supera i vantaggi e la flessibilità di .htaccess
i file forniscono agli sviluppatori.

Tuttavia, se questo ti riguarda, a patto che tu abbia accesso al file httpd.conf
allora puoi sempre mettere le tue direttive lì. Impostando AllowOverride su "Nessuno"
Apache non cercherà quei file .htaccess. Se vuoi davvero, puoi metterlo
le direttive che volevi inserire nel tuo /www/supercool/test/.htaccess file
direttamente in httpd.conf in questo modo:

 # Inserisci le direttive qui 

Lo svantaggio di questo approccio è che dovrai riavviare il server Apache
ad ogni modifica in modo che ricarichi la nuova configurazione.

Alla fine, si tratta di preferenze personali o di qualsiasi cosa l'ospitante lo consenta.
Preferisco usare i file .htaccess perché ho la flessibilità di collocarli dove
Voglio, ed i loro effetti sono live immediatamente senza richiedere un reset del server.

Avvio semplice - Elenco directory - Indici:

Elenco delle directory

Prima di entrare in una delle funzioni complesse, iniziamo con qualcosa
semplice, ma utile, in modo che tu possa acquisire familiarità con i file .htaccess.
Gli elenchi delle directory sono così comuni che probabilmente li hai incontrati numerosi
volte navigando nel web.

Quando un utente richiede una directory, Apache prima cerca il file predefinito. In genere, verrà denominato "index.html" o "index.php" o qualcosa di simile. Quando non lo fa
trova uno di questi file, ricade sul modulo mod_autoindex su
mostra un elenco dei file e delle cartelle in quella directory. A volte questo
è abilitato, a volte disabilitato e talvolta lo si desidera
fare personalizzazioni. Bene, con .htaccess puoi facilmente manipolare questi elenchi!

Per impostazione predefinita, gli elenchi di directory sono abilitati. Ecco uno scenario di esempio.
Supponiamo che tu abbia un mucchio di file multimediali che stai memorizzando sul tuo server web,
e tu vuoi nasconderli al pubblico e ai motori di ricerca in modo che nessuno possa
rubare questi file È molto facile da fare! Basta creare un file .htaccess
nella directory che si desidera nascondere e aggiungere la seguente direttiva:

# Disabilita elenchi di directory in questa directory e sottodirectory # Nasconde i file dal pubblico a meno che non conoscano gli URL diretti Opzioni -Index

Direttiva sulle opzioni

Spezzando questo stiamo usando la direttiva Options.
Questa direttiva può assumere un numero di valori (menzionato in precedenza). Se fornisci i valori
con un + o - come ho fatto con -Indexes, allora questo erediterà il
Opzioni che erano abilitate nelle directory più alte e nella configurazione globale!
Se non fornisci un + o - allora l'elenco che fornisci diventerà
il solo opzioni abilitate per quella directory e le sue sottodirectory. Nessuna altra opzione sarà abilitata. Perché potresti non sapere quali Opzioni sono state abilitate in precedenza, molto probabilmente lo farai
usa la sintassi + o - a meno che tu non sia assolutamente sicuro di te solo voglio certe opzioni.

Ora, con quella direttiva nel tuo file .htaccess, quando punti il ​​tuo browser in quella directory
non sarai più in grado di vedere i file. Ecco il prima e il dopo:

Forge Ahead - Autenticazione di base

Ok, forse disabilitare completamente l'indice della directory non è quello che vuoi. È più
probabile che tu voglia mantenere gli indici ma permetti solo ad alcune persone di accedere.
È qui che l'autenticazione di base può essere molto utile. Questo è il più comune
tipo di autenticazione sul web. Quando l'utente tenta di accedere alla pagina loro
vedrà la familiare finestra di dialogo Username / Password. Solo un utente con il corretto
le credenziali saranno in grado di accedere ai contenuti.

Per l'autenticazione di base ci sono solo due passaggi.

  1. Imposta un file che memorizza nomi utente e password (crittografati).
  2. Aggiungi alcune righe a .htaccess per utilizzare quel file.

Tradizionalmente gli sviluppatori web hanno chiamato il file che memorizza i nomi utente e
password ".htpasswd". Questo perché lo strumento da riga di comando fornito con
Apache che genera la corretta coppia nome utente / password crittografata è in realtà
chiamato htpasswd! Se ti senti a tuo agio sulla riga di comando puoi usare htpasswd
strumento, tuttavia ci sono molti strumenti online che generano l'output con la stessa facilità.

Ho creato un file .htpasswd di esempio per un utente "joe" con password "cool".
Ho buttato quei valori nello strumento online collegato e ha prodotto:

joe: $ apr1 $ QneYj / ... $ 0G9cBfG2CdFGwia.AHFtR1

Il tuo output potrebbe essere diverso, va bene. Le password sono con hash con
un sale casuale per renderli un po 'più unici e sicuri. Una volta il tuo nome utente
e la combinazione di password è stata aggiunta al file .htpasswd, quindi dovresti
aggiungi le seguenti righe al tuo file:

# Abilita autenticazione di base AuthType Basic # Questo è ciò che verrà visualizzato all'utente nella finestra di dialogo di accesso. AuthName "Accesso ai file nascosti" # Questo è necessario modificare. È il percorso assoluto del file .htpasswd. AuthUserFile /path/to/.htpasswd # Ciò consente a qualsiasi utente all'interno del file .htpasswd di accedere al contenuto # se fornisce il nome utente e la password corretti. Richiedi utente valido

Quei comandi sono ben documentati. L'unica vera sfida è che tu
devi impostare correttamente il percorso del file .htpasswd che hai appena
generato. Questo è un percorso assoluto completo dalla radice assoluta del
server. Inoltre, poiché il percorso del file .htpasswd è assoluto, va bene
pratica per metterlo in una directory al di fuori della directory in cui Apache
serve pagine web al pubblico. In questo modo gli utenti malintenzionati non saranno in grado
per accedere facilmente alla lista grezza di utenti / password memorizzati in .htpasswd.

Una volta che è tutto pronto, quando qualcuno tenta di accedere alla pagina lo farà
ricevere la seguente finestra di dialogo:

L'autenticazione di base è semplice e facile, ma non è una soluzione totale.
Le password vengono inviate sul filo, Base 64 Encoded, in formato testo. Se tu
vuoi un'autenticazione più sicura dovresti accoppiare l'autenticazione di base
con https, un altro
protocollo sicuro. Questo è un argomento per un'altra volta.

intestazioni

Il protocollo di base del web è l'Hypertext Transfer Protocol (HTTP).
Se vuoi davvero capire quali sono le altre direttive Apache
trattare con, si dovrebbe avere una certa conoscenza del protocollo. sono
solo andando a su pplya riassunto molto veloce qui. Farò anche uno sforzo
per spiegare cosa stanno facendo le direttive più complesse, ma lo farà
più senso se capisci intestazioni HTTP.

Il sommario rapido è che HTTP è senza stato. Ad ogni richiesta (dal browser)
e ogni risposta (dal server Web come Apache) ci sono due sezioni.
Una sezione di informazioni sull'intestazione, quindi una sezione facoltativa contenente i dati stessi,
se ci sono dati.

Le informazioni dell'intestazione della richiesta spesso specificano il file che sono
richiedendo dal server (index.html), qualsiasi informazione di stato che dovrebbero fornire
(come i dati dei cookie) e i tipi di mime che è disposto ad accettare dal server
(testo / html o anche contenuto codificato gzip).

Le informazioni dell'intestazione di risposta spesso specificano informazioni generiche sul server (Apache, PHP,
Versioni di Perl ecc.), Codifica del contenuto, lunghezza, mime / tipo e altro. Là
sono una pletora di intestazioni HTTP per specificare ancora più dettagli come Cache Control,
Reindirizzamenti e codici di stato. Hai mai ricevuto un 404? Questo era il risultato della richiesta di a
file che il server non è stato in grado di trovare e quindi ha restituito un 404
Codice di stato nel suo
Risposta.

Che cosa ha a che fare con .htaccess? Bene, puoi usare le direttive di Apache
sovrascrivi (imposta) o aggiungi nuove intestazioni (aggiungi) che vengono inviate al client
nella sezione Intestazione della risposta. Inoltre, come vedrai nei tutorial successivi,
funzionalità più avanzate come la riscrittura degli URL si occupa delle intestazioni in arrivo.

Iniziamo semplice, aggiungeremo un'intestazione alla risposta e vediamo cosa succede:

# Aggiungi la seguente intestazione ad ogni risposta Intestazione aggiungi X-HeaderName "Valore intestazione"

Richiedere un file nella stessa directory di questo file .htaccess mostra il file .htaccess
intestazione aggiuntiva:

Probabilmente hai pensato che fosse strano che io abbia anteposto l'intestazione personalizzata a
"X-". Questa è in realtà una convenzione comune che gli sviluppatori usano per denotare ciò
l'intestazione è un'intestazione non standard. Questo rende davvero facile rendersi conto che questa intestazione è personalizzata. Questa convenzione è
brevemente menzionato qui.

Su una nota più comica, alcune persone si sono divertite un po 'con le intestazioni.
Questo sito
indica alcune intestazioni piuttosto insolite trovate in tutto il web.

Tuttavia, voglio davvero mostrarti come creare intestazioni in modo che tu possa
usali come tecnica di debug. Proprio l'altro giorno, ho eseguito un test per
controlla se alcuni moduli sono stati abilitati su un server web. scrissi
il seguente controllo:

 Intestazione aggiungi mod_gzip X-Enabled   Intestazione aggiungi mod_deflate X-Enabled 

Quando ho fatto la mia prossima richiesta con il mio browser e ho controllato le intestazioni di risposta, è stato
ha mostrato che nessuno dei moduli era acceso! Ho contattato la mia società di hosting e hanno accettato di abilitare la compressione gzip!

C'è una differenza tra il set di intestazione e
Aggiungi intestazione. Con l'aggiunta, l'intestazione lo farà sempre essere aggiunto
alla risposta. Anche se capita di presentarsi più volte nella risposta. Questo è più spesso
cosa vorresti per le intestazioni personalizzate. Dovresti usare il set quando vuoi
sostituisce il valore di uno degli header predefiniti restituiti da Apache. Un
esempio potrebbe sovrascrivere il mime / tipo specificato dal Content-Type
intestazione per un determinato file. Apache avrebbe impostato il valore interno e quindi
usalo quando stampa l'intestazione predefinita. Non ci sarà
duplicati e quindi nessuna possibilità di interpretare un errore o confusione
dal cliente. (Nel caso ve lo stiate chiedendo, la specifica HTTP afferma che, in
Nel caso di duplicati, il client deve sempre utilizzare l'ultimo valore specificato
per quell'intestazione duplicata.)

Conclusione:

Ho esaminato alcune direttive Apache di base con un po 'di dettagli. Volevo ottenere i dettagli fondamentali in modo che il prossimo tutorial potesse discutere di cose più interessanti. Il mio prossimo articolo lo farà
concentrati su alcune delle funzionalità più utili che puoi abilitare con .htaccess.
Questi argomenti includeranno:

  • Codifica GZip del contenuto per Apache 1.3 e Apache 2
  • Una descrizione dettagliata di mod_rewrite e molti esempi
    che sono sezionati e spiegati in dettaglio.
  • Seguici su Twitter o iscriviti al feed RSS di NETTUTS per ulteriori tuts e articoli di sviluppo web giornalieri.

E non dimenticare, se hai difficoltà a seguirlo, un'altra opzione è provare l'utilità .htaccess Builder disponibile su Envato Market.