Den ultimate guiden til .htaccess-filer

Apache. Htaccess konfigurasjonsfiler har forvirret utallige utviklere. Denne opplæringen tar sikte på å bryte gjennom denne forvirringen ved å fokusere på eksempler og grundige beskrivelser. Blant fordelene med å lære. Htaccess-konfigurasjonen er automatisk gzipping av innholdet ditt, gir vennligere nettadresser, forhindrer hotlinking, forbedrer caching og mer.

Leter du etter en rask løsning?

Denne artikkelen vil lære deg hvordan du konfigurerer .htaccess-filene manuelt, men hvis du vil ha en enkel og rask løsning, prøv å laste ned .htaccess Builder fra Envato Market. Det lar deg raskt og enkelt levere en htaccess-fil uten å måtte huske noe om Apache-server språket som brukes til å konstruere htaccess-filen!

.htaccess Builder på Envato Market

Introduksjon:

Jeg har lest en rekke .htaccess artikler på nettet. Jeg innrømmer sjamløst
Jeg kom ikke over forsiden av Google-resultatene. Jeg ble sjokkert da
Jeg har faktisk lest artiklene og funnet ut at ingen av dem forklarte hva Apache egentlig var
driver med. De var bare en samling av populære eller nyttige triks eller
utdrag av gjenbrukbar kode. Det er alt bra og bra, men den klassiske
argumentet er:

"Gi en mann en fisk, og han vil spise for en dag. Lær en mann å fiske og han
vil spise for livet. "
- Konfucius

I denne artikkelen skal jeg prøve å ikke bare vise deg eksempler på nyttige
.htaccess-direktiver, men forklar nøyaktig hva som er
fortsette. På den måten forstår du kjerneprinsippene og kan deretter forlenge
eksempler eller opprett nye kommandoer til eget bruk uansett kreative eller nyttige måter
du kan komme opp med.

Mitt fokus vil være på Apache 2, men mye av dette vil gjelde
til Apache 1.3, og jeg vil prøve å påpeke eventuelle forskjeller som jeg vet om.

Til slutt vil denne opplæringen gi mest mening hvis du leser det i orden.
Jeg prøver å knytte mine eksempler sammen, og bygge opp av dem, i en slik
måte at du kan prøve dem selv og følge med.

Hva er .htaccess ?:

For å sitere Apache:

.htaccess-filer (eller "distribuerte konfigurasjonsfiler") gir en måte å lage
Konfigurasjonsendringer på per-katalog basis. En fil som inneholder en eller flere
konfigurasjonsdirektiver, er plassert i et bestemt dokumentkatalog, og
Direktiver gjelder for den katalogen og alle underkataloger derav.

direktiver

"Direktiver" er terminologien som Apache bruker for kommandoene i Apache
konfigurasjonsfiler. De er vanligvis relativt korte kommandoer, vanligvis
nøkkelverdierpar, som endrer Apaches oppførsel. En .htaccess-fil tillater det
utviklere å utføre en haug med disse direktiver uten å kreve tilgang til
Apaches kjerneserver konfigurasjonsfil, ofte kalt httpd.conf.
Denne filen,
httpd.conf, kalles vanligvis "global konfigurasjonsfil" og jeg vil
referer til det med det navnet eller dets korte filnavn tilsvarende.

Denne funksjonen er ideell for mange hosting-selskaper som distribuerer en delt hosting
miljø. Vertsfirmaet vil ikke tillate kundene å få tilgang til
global konfigurasjonsfil, som i siste instans påvirker alle kundene som er vert på
den serveren. I stedet, ved å aktivere .htaccess, gir de hver av sine kunder
makt til å spesifisere og gjennomføre sine egne Apache-direktiver i sine egne
kataloger og underkataloger. Selvfølgelig er det også nyttig for singelen
utvikler, som du vil se.

Det er verdt å nevne at alt som kan gjøres med en .htaccess-fil kan
gjøres i httpd.conf filen. derimot, IKKE alt som kan gjøres i
httpd.conf kan gjøres i en .htaccess-fil. Faktisk må .htaccess-filer være
aktivert i httpd.conf filen for å bli kjørt i det hele tatt. En gang aktivert,
deres makt kan begrenses til visse "sammenhenger" slik at de kan bli tillatt
å overstyre noen innstillinger, men ikke andre. Dette gir systemadministratorer
mer kontroll over hva de lar andre utviklere komme unna med i deres
.htaccess-filer.

Aktiverer .htaccess:

.Htaccess-filer er normalt aktivert som standard. Dette er faktisk kontrollert
ved AllowOverride-direktivet i httpd.conf-filen. Dette direktivet
kan bare plasseres inne i a seksjon. Ikke la dette forvirre
du. Den typiske httpd.conf-filen definerer en DocumentRoot og majoriteten
av filen vil inneholde direktiver inne i en seksjonen handler
med den katalogen. Dette inkluderer AllowOverride-direktivet.

Standardverdien er faktisk "Alle" og dermed. Htaccess-filer er aktivert av
misligholde. En alternativ verdi ville være "Ingen" som ville bety at de er
helt deaktivert. Det er mange andre verdier som begrenser konfigurasjonen av bare
visse sammenhenger. Noen er:

  • AuthConfig - Autorisasjonsdirektiver som de som omhandler grunnleggende godkjenning.
  • FileInfo - Direktiver som omhandler innstilling av overskrifter, feildokumenter, informasjonskapsler, URL-omskrivning og mer.
  • Indekser - Standard katalogoppføring tilpassinger.
  • Limit - Kontroller tilgang til sider på en rekke forskjellige måter.
  • Alternativer - Lignende tilgang til indekser, men inkluderer selv
    flere verdier som ExecCGI, FollowSymLinks, Inkluderer og mer.

Full. Htaccess Overstyring

Jeg vil vise noen eksempler, uten deres tilsvarende seksjoner.
Her er et eksempel som tillater fullstendig .htaccess overstyring:

# Tillat .htaccess-filer deres full effekt AllowOverride All

Begrenset Overstyring

Og her er et eksempel som tar en mer fin kornet tilnærming og tillater bare
overstyring av autorisasjon og indekser sammenhenger, men ingenting annet:

# Tillat bare .htaccess-filer å overstyre autorisasjon og indekser TillateOverride AuthConfig-indekser

kommentarer

Den første linjen i begge disse eksemplene er Apache kommentarer. Kommentarer starter
med symbolet "#". Dette er vanlig for mange konfigurasjonsfiler og skripting
språk. Jeg har mange kommentarer i eksemplene mine for å forklare hva som skjer.
Men de er ikke påkrevd, og det er egentlig bare personlig preferanse på hvor mye du
vil kommentere. Kommentarer er ikke nødvendig.

Den andre linjen er selve AllowOverride-direktivet. Dette er den vanlige syntaksen til en
Apache Direktiv. Først er det navnet på navnet "AllowOverride" etterfulgt av et mellomrom
skilt liste over verdier. Selv om denne syntaksen ser ganske løs ut; vær alltid forsiktig.

Noen ganger kan en enkelt feil i httpd.conf eller .htaccess-filen resultere i en
midlertidig nedsmelting av serveren, og brukere vil se 500 - interne serverfeil sider.

Derfor er det bare god praksis å alltid sikkerhetskopiere httpd.conf og .htaccess-filer før du foretar endringer eller tillegg. På denne måten, hvis noe går galt med en endring, vil du ha
ingenting å bekymre deg for, fordi du kan gå tilbake til din tidligere arbeidsversjon. Jeg vil
Du må også oppfordre deg til å gjøre små endringer av gangen og kontrollere at endringene fungerer
trinn i motsetning til å gjøre flere endringer samtidig.
På denne måten, hvis du lager
En feil, det vil være mye lettere å spore hva som kan ha forårsaket det.

Hvis du noen gang er forvirret på syntaksen til et hvilket som helst direktiv, går du straks til
Apache-direktivet noterer og gjennomgår "Syntaxen" de har oppført i tabellen
for hvert enkelt direktiv. Jeg vil gjøre mitt beste for å prøve og forklare det her
(Jeg prøver å undervise), men min forklaring kan aldri være like god som
formell teknisk dokumentasjon selv. Ikke vær redd for dokumentasjonen, det er det
Din mest pålitelige og troverdige referanse. Jeg vil prøve å gjøre ting mer interessant
her (woohoo!), men til slutt legger jeg bare en annen snurr på disse dokumentene.

Kontrollerer om .htaccess er aktivert:

Det er ganske mulig, faktisk er det ekstremt sannsynlig at hostingfirmaet ikke gjør det
gi deg tilgang til httpd.conf filen. Så hvordan vet du om .htaccess-støtte er aktivert
eller ikke? Ikke bekymre deg. Htaccess er en veldig vanlig og nyttig funksjon som de fleste bedrifter vil
har aktivert, eller vil aktivere hvis du spør høflig.

Det beste du bør gjøre er å bare sjekke med ditt firma. Hvis det ikke er eksplisitt
oppført hvor som helst i din hosting plan, så skyte deres støtte en e-post. Dette er en relativt vanlig
spørsmålet så de mest sannsynlig allerede har et svar klar for deg. De vil sannsynligvis være villige
for å aktivere tjenesten eller i det minste gi en grunn til at de ikke tillater det.

Uansett kan du alltid gi det et skudd og se om en enkel .htaccess-fil fungerer!
Inkludert i denne opplæringen er prøve nedlasting på to måter som du kan sjekke for å se om .htaccess
Støtte er aktivert. De to mappene er "is_htaccess_enabled" og "is_htaccess_enabled_2".
Gi dem et skudd, jeg skal forklare hva hver og en gjør her.

is_htaccess_enabled

Dette testfallet er veldig enkelt. Det bruker et direktiv for å gjøre Apache utseende
først for "indeksen"good.html "fil før" index.html. "Hvis .htaccess-støtte er
aktivert, når du peker nettleseren din til mappen, vil Apache laste .htaccess-filen og vite det
det skal vise "indeksen
good.html "-siden som inneholder en grønn melding som sier gratulerer!
Hvis .htaccess-støtte ikke er aktivert, ignorerer Apache som standard .htaccess
fil og umiddelbart se etter en index.html-fil.

# Dette direktivet vil gjøre Apache se først # for "index_good.html" før du ser etter "index.html" DirectoryIndex index_good.html index.html

DirectoryIndex

DirectoryIndex-direktivet tar en plassseparert liste over potensielle filnavn.
Når Apache er gitt en URL til en katalog, og ikke en direkte side (for eksempel
http://www.example.com og ikke http://www.example.com/index.html) Apache bruker dette
liste over filer for å søke etter riktig side å laste inn. Apache vil se etter filene
bruker verdiene i listen fra venstre til høyre. Den første filen som Apache ser, eksisterer
vil være filen den laster og viser til klienten.

Ved hjelp av ovenstående .htaccess-fil, er dette et eksempel på de gode (aktiverte) og dårlige (deaktiverte) tilfellene:

is_htaccess_enabled_2

Som jeg sa tidligere, vil en syntaksfeil i .htaccess-filen få serveren til å hikke.
Du kan bruke dette til din fordel for å teste om serveren har .htaccess-støtte aktivert!
Her er et eksempel på en .htaccess-fil som er beregnet på å sprenge opp.

# Denne filen er ment å gjøre Apache sprenge opp. Dette vil hjelpe # avgjøre om .htaccess er aktivert eller ikke! ahhhhhhh

Det er ganske klart at "AHHHHHHH" ikke er et gyldig Apache-direktiv. Dette vil forårsake
en feil hvis Apache prøver å lese .htaccess-filen! Så, hvis du kommer tilbake en side roping
"Intern serverfeil", da ser serveren etter .htaccess-filer! Hvis du egentlig
se innholdet i index.html-filen, så er det sannsynlig at de har blitt deaktivert. Her er også de gode og dårlige tilfellene:

Access

Endelig er det fortsatt mulig at .htaccess-støtten fortsatt er aktivert, bare med
unike innstillinger. Systemadministratorer kan bare endre navnet på .htaccess-filen
som vi endret navnet på standardfilen Apache ser etter. Dette er mulig med
bruker AccessFileName
direktivet i den globale konfigurasjonsfilen. Igjen, det beste å gjøre i det tilfellet ville være å
kontakt ditt vertsfirma for mer informasjon.

Konsekvenser av .htaccess-filer:

Før jeg kommer inn i noen av de kule tingene du kan gjøre med. Htaccess-filer, må jeg
fortell deg hva du kommer inn på. Som nevnt tidligere tillater du
overstyrende serverinnstillinger for en katalog og alle dets underkataloger. Alltid
Husk at du påvirker alle underkataloger, så vel som gjeldende
katalog.

Også, når aktivert, vil serveren ta en potensiell ytelsestreff. Årsaken er fordi, hver serverforespørsel, hvis .htaccess-støtte er aktivert, når Apache går for å hente den forespurte filen for klienten, må den lete etter en .htaccess-fil i hver enkelt katalog som fører opp til hvor filen er lagret.

Dette betyr en rekke ting. Først fordi Apache alltid ser etter .htaccess-filene
På alle forespørsler vil eventuelle endringer i filen straks tre i kraft.
Apache cache ikke dem, og det vil umiddelbart se endringene dine på neste forespørsel.
Dette betyr imidlertid også at Apache kommer til å måtte gjøre litt ekstra arbeid for hver forespørsel.
For eksempel, hvis en bruker ber om /www/supercool/test/index.html, så serveren din
ville sjekke for følgende .htaccess-filer:

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

Disse potensielle filtilgangene (potensial fordi filene kanskje ikke eksisterer) og deres
utførelse (hvis de eksisterte) vil ta tid. Igjen, min erfaring er at den er
unnoticeable og det oppveier ikke fordelene og fleksibiliteten som .htaccess
filer gir utviklere.

Men hvis dette gjelder deg, så lenge du har tilgang til httpd.conf filen
da kan du alltid sette dine retningslinjer der. Ved å sette AllowOverride til "None"
Apache vil ikke lete etter disse .htaccess-filene. Hvis du virkelig vil, kan du sette
de retningslinjene du ønsket å legge inn i /www/supercool/test/.htaccess-filen
direkte i httpd.conf slik:

 # Legg til direktiver her 

Ulempen med denne tilnærmingen er at du må starte Apache-serveren på nytt
på alle endringer slik at den laster opp den nye konfigurasjonen.

Til slutt kommer det ned til personlig preferanse eller hva verten tillater.
Jeg foretrekker å bruke .htaccess-filer fordi jeg har fleksibilitet til å plassere dem der
Jeg vil ha, og effektene deres lever umiddelbart, uten at det kreves server tilbakestilling.

Starte Enkel - Katalogoppføring - Indekser:

Katalogoppføringer

Før vi går inn i noen av de komplekse funksjonene, la oss starte med noe
enkelt, men nyttig, slik at du kan få en følelse av å jobbe med .htaccess-filer.
Directory Listings er så vanlig at du sikkert har kommet over dem mange
Tider som surfer på nettet.

Når en bruker ber om en katalog, ser Apache først etter standardfilen. Vanligvis vil den bli kalt "index.html" eller "index.php" eller noe lignende. Når det ikke gjør det
finn en av disse filene, den faller tilbake på mod_autoindex-modulen til
vise en liste over filene og mappene i katalogen. Noen ganger dette
er aktivert, noen ganger deaktivert, og noen ganger vil du
foreta tilpasninger. Vel, med .htaccess kan du enkelt manipulere disse oppføringene!

Som standard er katalogoppføringer aktivert. Her er et eksempel scenario.
Anta at du har en masse mediefiler som du lagrer på din webserver,
og du vil gjemme dem fra offentlige og søkemotorer slik at ingen kan
stjele disse filene. Det er veldig enkelt å gjøre! Opprett bare en .htaccess-fil
i katalogen du vil gjemme og legge til følgende direktiv:

# Deaktiver katalogoppføringer i denne katalogen og underkataloger # Dette vil skjule filene fra offentligheten med mindre de kjenner direkte nettadresser Alternativer -Indexes

Alternativdirektivet

Bryter dette ned, vi bruker alternativdirektivet.
Dette direktivet kan ta en rekke verdier (nevnt tidligere). Hvis du oppgir verdiene
med + eller - som jeg gjorde med -Indexes, da vil dette arve
Alternativer som ble aktivert i høyere kataloger og den globale konfigurasjonen!
Hvis du ikke oppgir en + eller - så vil listen du oppgir bli
de bare alternativer aktivert for den katalogen og dets underkataloger. Ingen andre alternativer vil bli aktivert. Fordi du kanskje ikke vet hvilke alternativer som ble aktivert tidligere, vil du mest sannsynlig
bruk + eller - syntaks hvis du ikke er helt sikker på deg bare vil ha visse alternativer.

Nå, med det direktivet i .htaccess-filen din, når du peker nettleseren til den katalogen
Du vil ikke lenger kunne se filene. Her er før og etter:

Forge Ahead - Grunnleggende godkjenning

Ok, kanskje helt deaktivere Directory Index er ikke det du vil. Det er mer
sannsynlig at du vil beholde indeksene, men bare la enkelte personer få tilgang.
Det er her grunnleggende godkjenning kan være veldig nyttig. Dette er den vanligste
type autentisering på nettet. Når brukeren prøver å få tilgang til siden de
vil se den kjente brukernavnet / passorddialogen. Bare en bruker med riktig
legitimasjonsbeskrivelser vil kunne få tilgang til innholdet.

For grunnleggende autentisering er det bare to trinn.

  1. Oppsett en fil som lagrer brukernavn og passord (kryptert).
  2. Legg til noen linjer til .htaccess for å bruke den filen.

Tradisjonelt har webutviklere kalt filen som lagrer brukernavnene og
passord ".htpasswd". Dette skyldes at kommandolinjeverktøyet som leveres med
Apache som genererer riktig kryptert brukernavn / passordspar er faktisk
kalt htpasswd! Hvis du føler deg komfortabel på kommandolinjen, kan du bruke htpasswd
verktøy, men det er mange elektroniske verktøy som vil generere produksjonen like enkelt.

Jeg opprettet en .htpasswd-fil for en bruker "joe" med passord "kult".
Jeg kastet disse verdiene inn i det koblede nettverktøyet og det produserte:

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

Din utgang kan være annerledes, det er greit. Passordene er hentet med
et tilfeldig salt for å gjøre dem litt mer unike og sikre. En gang brukernavnet ditt
og passordkombinasjonen er lagt til i .htpasswd-filen, så bør du
legg til følgende linjer i filen din:

# Aktiver grunnleggende autentisering AuthType Basic # Dette er hva som vil bli vist til brukeren på innloggingsdialogboksen. AuthName "Tilgang til de skjulte filene" # Dette må du redigere. Det er den absolutte banen til .htpasswd-filen. AuthUserFile /path/to/.htpasswd # Dette tillater enhver bruker fra innsiden av .htpasswd-filen å få tilgang til #-innholdet hvis de oppgir riktig brukernavn og passord. Krev gyldig bruker

Disse kommandoene er godt dokumentert. Den eneste virkelige utfordringen er at du
må riktig sette banen til .htpasswd-filen som du bare har
generert. Dette er en fullstendig absolutt sti fra den absolutt rotte av
server. Også fordi .htpasswd-filbanen er absolutt, er det bra
Øv deg for å sette den i en katalog utenfor katalogen der Apache
serverer nettsider til publikum. På den måten vil ondsinnede brukere ikke kunne
for enkelt å få tilgang til den røde oppføringen av brukere / passord lagret i .htpasswd.

Når det er satt opp, når noen prøver å få tilgang til siden, vil de
motta følgende dialog:

Grunnleggende autentisering er fin og enkel, men det er ikke en total løsning.
Passord sendes over ledningen, Base 64 Kodet, i ren tekst. Hvis du
Ønsker mer sikker autentisering bør du koble til grunnleggende autentisering
med https, en mer
sikker protokoll. Det er et emne for en annen gang.

overskrifter

Kjerneprotokollen på nettet er Hypertext Transfer Protocol (HTTP).
Hvis du virkelig vil forstå hva resten av Apache-direktiverne gjelder
håndtere, bør du ha litt kunnskap om protokollen. Jeg er
bare går til su pplya veldig rask oppsummering her. Jeg vil også gjøre en innsats
å forklare hva de mer komplekse direktivene gjør, men det vil gjøre
mer fornuftig hvis du forstår HTTP Headers.

Den raske oppsummeringen er at HTTP er statsløs. Med hver forespørsel (fra nettleseren)
og hvert svar (fra Web Server som Apache) er det to seksjoner.
En del av headerinformasjon, deretter en valgfri seksjon som inneholder dataene selv,
hvis det er noen data.

Forespørselheaderinformasjon spesifiserer ofte filen de er
Be om serveren (index.html), hvilken statlig informasjon de skal gi
(for eksempel informasjonskapsler), og mime-typene er det villig til å godta tilbake fra serveren
(tekst / html eller gzip kodet innhold).

Svarheadsinformasjon spesifiserer ofte generisk serverinformasjon (Apache, PHP,
Perl versjoner etc.), innholdet koding, lengde, mime / type og mer. Der
er en mengde HTTP-overskrifter for å angi enda flere detaljer som Cache Control,
Omadresser og Statuskoder. Har du noen gang fått 404? Det var et resultat av å be om a
filen serveren ikke kunne finne, og dermed sendte den tilbake en 404
Status kode i sin
Respons.

Hva har dette å gjøre med .htaccess? Vel, du kan bruke Apache-direktiver til
overskrive (sett) eller legge til nye overskrifter (legg til) som sendes tilbake til klienten
i responsens header-seksjon. Også, som du vil se i senere opplæringsprogrammer,
mer avansert funksjonalitet som URL-omskrivning omhandler de innkommende overskriftene.

La oss starte enkle, vi legger til et overskrift til svaret og se hva som skjer:

# Legg til følgende overskrift for hvert svar. Legg til header. Legg til X-HeaderName "Header Value"

Be om en fil i samme katalog som denne .htaccess-filen viser
ekstra overskrift:

Du trodde sikkert det var merkelig at jeg prefiks den egendefinerte overskriften med
“X”. Dette er faktisk en vanlig konvensjon som utviklere bruker til å betegne det
overskriften er en ikke-standard header. Dette gjør det veldig enkelt å innse at denne overskriften er tilpasset. Denne konvensjonen er
kort nevnt her.

På et mer komisk notat har noen mennesker hatt litt moro med overskrifter.
Denne siden
peker på noen ganske uvanlige overskrifter som finnes over hele nettet.

Imidlertid vil jeg virkelig vise deg hvordan du lager Headers slik at du kan
bruk dem som en feilsøkingsteknikk. For øvrig kjørte jeg en prøve til
sjekk for å se om enkelte moduler var aktivert på en webserver. Jeg skrev
følgende sjekk:

 Header legger til X-Enabled mod_gzip   Header legger til X-Enabled mod_deflate 

Da jeg gjorde min neste forespørsel med nettleseren min og sjekket svaret overskrifter, det
viste at ingen av modulene var slått på! Jeg kontaktet vertsfirmaet mitt, og de ble enige om å aktivere gzip-komprimering!

Det er en forskjell mellom Header sett og
Header add. Med tillegg vil Header alltid bli lagt til
til svaret. Selv om det skjer flere ganger i svaret. Dette er oftest
hva du vil ha for egendefinerte overskrifter. Du vil bruke sett når du vil
overstyr verdien av en av standardhodene som Apache returnerer. en
Eksempelet ville være overordnet mime / type spesifisert av innholdstypen
header for en bestemt fil. Apache ville sette den interne verdien og deretter
bruk det når det skriver ut standard header. Det vil være nei
duplikater, og dermed ingen mulighet for å tolke en feil eller forvirring
av klienten. (I tilfelle du lurte på, oppgir HTTP-spesifikasjonen at, i
Når det gjelder duplikater, skal klienten alltid bruke den sistnevnte verdien
for den duplikatkopien.)

Konklusjon:

Jeg har gått over noen grunnleggende Apache-direktiver i ganske detaljert detalj. Jeg ønsket å få de grunnleggende detaljene ut av veien slik at neste opplæring kan diskutere kjøligere ting. Min neste artikkel vil
fokus på noen av de mer nyttige funksjonene du kan aktivere med .htaccess.
Disse temaene vil omfatte:

  • GZip-koding av innhold for både Apache 1.3 og Apache 2
  • En beskrivelse av mod_rewrite og mange eksempler
    som er dissekert og forklart i detalj.
  • Følg oss på Twitter, eller abonner på NETTUTS RSS Feed for flere daglige webutviklingsverktøy og artikler.

Og ikke glem, hvis du sliter med å følge dette, er et annet alternativ å prøve .htaccess Builder-verktøyet tilgjengelig på Envato Market.