.htaccess-bestanden worden gebruikt om Apache te configureren, evenals een reeks andere webservers. Ondanks de .htaccess
bestandsextensie, het zijn gewoon tekstbestanden die met elke teksteditor kunnen worden bewerkt. In dit artikel zullen we bekijken wat ze zijn en hoe u ze kunt gebruiken in uw projecten.
Houd er rekening mee dat. Htaccess-bestanden niet werken op Windows-systemen, hoewel ze kunnen worden bewerkt en geüpload naar een compatibele webserver, en op Linux-gebaseerde systemen zijn ze standaard verborgen.
Om lokaal met htaccess-bestanden te werken, om te zien hoe ze werken en er meestal mee spelen, kunnen we XAMPP (of MAMP) op de Mac gebruiken - een pakket dat Apache, PHP en MySQL installeert en configureert. Om deze .htaccess-bestanden op Mac te bewerken, moeten we een teksteditor gebruiken waarmee verborgen bestanden kunnen worden geopend, zoals TextWrangler.
Een .htaccess-bestand volgt hetzelfde formaat als het hoofdconfiguratiebestand van Apache: httpd.conf
. Veel van de instellingen die kunnen worden geconfigureerd met behulp van het hoofdconfiguratiebestand kunnen ook met deze instellingen worden geconfigureerd en omgekeerd.
Een instelling die in een .htaccess-bestand is geconfigureerd, overschrijft dezelfde instelling in het hoofdconfiguratiebestand voor de map waarin het bestand zich bevindt, evenals alle bijbehorende submappen.
Ze worden soms dynamische configuratiebestanden genoemd omdat ze door de server op elk verzoek worden gelezen in de directory waarin ze zich bevinden. Dit betekent dat alle wijzigingen in een .htaccess-bestand onmiddellijk in werking treden, zonder dat de server opnieuw moet worden opgestart, in tegenstelling tot wijzigingen in het algemene configuratiebestand. Het betekent ook dat je een kleine performance-hit betaalt om ze te gebruiken, maar ze kunnen handig zijn als je geen toegang hebt tot het hoofdconfiguratiebestand van de server..
Dus nu weten we allemaal welke .htaccess-bestanden zijn, hoe ze zijn bewerkt en bewerkt, en enkele van hun voor- en nadelen, laten we kijken naar hoe ze kunnen worden gebruikt en een aantal van de coole dingen die ze kunnen doen.
Een populair gebruik van .htaccess-bestanden is om doorverwijzingen uit te voeren of URL's te herschrijven. Dit kan helpen bij het volgen van een domeinnaamwijziging of reorganisatie van de bestandsstructuur, of het kan een lange lelijke URL vriendelijker en gedenkwaardiger maken.
Een omleiding kan zo eenvoudig zijn als het volgende:
Stuur 301 ^ oud \ .html $ http: //localhost/new.html door
Hiermee wordt de HTTP-statuscode ingesteld op 301 (permanent verplaatst) en worden alle verzoeken omgeleid naar old.html
transparant op new.html
. We gebruiken een reguliere expressie om de URL te koppelen aan doorverwijzing, wat ons een fijne mate van controle geeft om ervoor te zorgen dat alleen de juiste URL overeenkomt met omleiding, maar voegt complexiteit toe aan de configuratie en het beheer ervan. De volledige URL van de bron waarnaar wordt doorgestuurd, is vereist.
Een herschrijfregel kan zo simpel zijn als deze:
RewriteEngine op RewriteRule ^ old \ .html $ new.html
In dit voorbeeld bieden we slechts een eenvoudige bestandsomleiding van het ene bestand naar het andere, die ook transparant wordt uitgevoerd, zonder dat dit verandert wat wordt weergegeven in de adresbalk. De eerste richtlijn, Herschrijf de machine aan
, zorgt eenvoudigweg ervoor dat de herschrijf-engine is ingeschakeld.
Om te updaten wat wordt weergegeven in de adresbalk van de browser van de bezoeker, kunnen we de R
vlag aan het einde van de RewriteRule
bv.
RewriteRule ^ old \ .html $ http: //hostname/new.html [r = 301]
De r
vlag veroorzaakt een externe omleiding en daarom wordt de volledige URL (hier een voorbeeld-URL) gegeven aan de nieuwe pagina. We kunnen ook de statuscode opgeven wanneer de vlag wordt gebruikt. Hierdoor wordt de adresbalk bijgewerkt in de browser van de bezoeker.
Een van de mogelijke toepassingen voor URL-rewriting die ik aan het begin van deze sectie heb gegeven, was om lelijke URL's (die queryreeksgegevens bevatten) vriendelijker te maken voor bezoekers en zoekmachines. Laten we dit nu in actie zien:
RewriteRule ^ products / ([^ /] +) / ([^ /] +) / ([^ /] +) product.php? Cat = $ 1 & brand = $ 2 & prod = $ 3
Met deze regel kunnen bezoekers een URL zoals gebruiken products / draaitafels / techniek / sl1210, en laat het transformeren in product.php? cat = draaitafels &$ 1
, $ 2
en $ 3
respectievelijk. De [^ /]+
tekenklasse tussen haakjes betekent dat elk teken, behalve een voorwaartse slash, 1 of meerdere keren overeenkomt.
In de praktijk kan het herschrijven van URL's veel complexer zijn (en is dat meestal ook) en veel grotere dingen bereiken dan dit. URL-herschrijving wordt beter uitgelegd met behulp van volledige tutorials, dus we zullen ze hier niet verder in detail bekijken.
Het is gewoon niet cool om de standaard 404-pagina meer te tonen. Veel sites maken van de gelegenheid gebruik door een bestand niet gevonden fout om een beetje humor in hun site te injecteren, maar op zijn minst verwachten mensen dat de 404-pagina van een site op zijn minst overeenkomt met de stijl en het thema van een andere pagina van de site.
Zeer nauw gerelateerd aan URL-herschrijving, het bedienen van een aangepaste foutpagina in plaats van de standaard 404-pagina is eenvoudig met een .htaccess-bestand:
ErrorDocument 404 "/404.html"
Dat is alles wat we nodig hebben; Wanneer een 404-fout optreedt, wordt de opgegeven pagina weergegeven. We kunnen pagina's configureren die ook voor veel andere serverfouten moeten worden weergegeven.
Met behulp van .htaccess-bestanden kunnen we wachtwoordbeveiliging van elk bestand of elke map inschakelen voor alle gebruikers, of op basis van zaken als domein of IP-adres. Dit is tenslotte een van hun kerndoelen. Om toegang tot een volledige map te voorkomen, zouden we eenvoudig een nieuw .htaccess-bestand maken met de volgende code:
AuthName "Gebruikersnaam en wachtwoord vereist" AuthUserFile /path/to/.htpasswd Vereist validatie-gebruiker AuthType Basic
Dit bestand moet dan worden opgeslagen in de map die we willen beschermen. De AuthName
richtlijn geeft het bericht weer dat moet worden weergegeven in het dialoogvenster gebruikersnaam / wachtwoord, de AuthUserFile
moet het pad naar het .htpasswd-bestand zijn. De Vereisen
richtlijn geeft aan dat alleen geverifieerde gebruikers toegang tot het beveiligde bestand kunnen krijgen terwijl de AuthType
ingesteld op basis-
.
Om een specifiek bestand te beveiligen, kunnen we de bovenstaande code in a plaatsen
richtlijn, die het beschermde bestand specificeert:
AuthName "Gebruikersnaam en wachtwoord vereist" AuthUserFile /path/to/.htpasswd Vereist validatie-gebruiker AuthType Basic
We hebben ook een .htpasswd-bestand nodig voor dit soort verificatie, dat een door dubbele punten gescheiden lijst met gebruikersnamen en versleutelde wachtwoorden bevat die nodig zijn voor toegang tot de beschermde bron (nen). Dit bestand moet worden opgeslagen in een map die niet toegankelijk is voor internet. Er zijn een aantal services die kunnen worden gebruikt om deze bestanden automatisch te genereren, omdat het wachtwoord gecodeerd moet worden opgeslagen.
Een ander gebruik van .htaccess-bestanden is om snel en eenvoudig alle aanvragen van een IP-adres of user-agent te blokkeren. Om een specifiek IP-adres te blokkeren, voegt u gewoon de volgende richtlijnen toe aan uw .htaccess-bestand:
order toestaan, ontken den van 192.168.0.1 toestaan van iedereen
De bestellen
richtlijn vertelt Apache in welke volgorde de richtlijnen voor toestaan / weigeren moeten worden geëvalueerd. In dit geval, toestaan
wordt eerst geëvalueerd ontkennen
. De laat iedereen toe
richtlijn wordt als eerste geëvalueerd (ook al verschijnt deze na de ontkennen
richtlijn) en alle IP's zijn toegestaan, als het IP-adres van de client overeenkomt met het IP-adres dat is opgegeven in de ontkennen
richtlijn, toegang is verboden. Hiermee kan iedereen binnen behalve het opgegeven IP-adres. Merk op dat we ook toegang tot volledige IP-blokken kunnen weigeren door een korter IP-adres, bijv. 192.168.
Om aanvragen op basis van user-agent te weigeren, kunnen we dit doen:
RewriteCond% HTTP_USER_AGENT ^ OrangeSpider RewriteRule ^ (. *) $ Http: //% REMOTE_ADDR / $ [r = 301, l]
In dit voorbeeld is elke client met een HTTP_USER_AGENT
string begint met OrangeSpider
(een slechte bot) wordt teruggeleid naar het adres waaruit het is ontstaan. De reguliere expressie komt overeen met een enkel teken (.)
nul of meer keer (*)
en omleidingen naar de % REMOTE_ADDR
omgevingsvariabele. De l
De vlag die we hier hebben gebruikt, instrueert Apache om deze overeenkomst te behandelen als de laatste regel, dus zullen er geen andere worden verwerkt voordat het herschrijven wordt uitgevoerd.
Naast controle over hoe de server op bepaalde verzoeken reageert, kunnen we ook dingen doen met de browser van de bezoeker, zoals IE dwingen om pagina's weer te geven met behulp van een specifieke rendering-engine. We kunnen bijvoorbeeld de mod_headers
module, als deze aanwezig is, om de X-UA-Compatible
header:
Header-set X-UA-compatibel "IE = Edge"
Als deze regel wordt toegevoegd aan een .htaccess-bestand, geeft IE opdracht de hoogste weergavemodus te gebruiken die beschikbaar is. Zoals aangetoond door HTML5 Boilerplate, kunnen we ook voorkomen dat deze header wordt geplaatst op bestanden die het niet nodig hebben door a te gebruiken
Header niet ingesteld X-UA-compatibel
Caching is eenvoudig in te stellen en kan uw site sneller laten laden.
Caching is eenvoudig in te stellen en kan uw site sneller laten laden. 'Genoeg gezegd! Door een toekomstige vervaldatum in te stellen voor elementen van sites die niet vaak veranderen, kunnen we voorkomen dat de browser onveranderde bronnen aanvraagt voor elke aanvraag.
Als u uw site via Google PageSpeed of Yahoo's YSlow beheert, krijgt u de melding over het instellen van ver in de toekomst vervallen headers, zo repareert u het:
VerlooptActief op VerlooptActief op VerlooptByType afbeelding / gif "toegang plus 1 maand" VerlooptByType afbeelding / png "toegang plus 1 maand" VerlooptByType afbeelding / jpg "toegang plus 1 maand" VerlooptByType afbeelding / jpeg "toegang plus 1 maand" VerlooptByType video / ogg "toegang plus 1 maand "ExpiresByType audio / ogg" toegang plus 1 maand "ExpiresByType video / mp4" toegang plus 1 maand "ExpiresByType video / webm" toegang plus 1 maand "
U kunt anders toevoegen ExpiresByType
richtlijnen voor alle inhoud die wordt vermeld in de performance-tool die u gebruikt, of iets anders waarvoor u caching wilt regelen. De eerste richtlijn, Verloopt Actief op
, zorgt gewoon voor de aanmaak van Expires headers is ingeschakeld. Deze richtlijnen zijn afhankelijk van Apache met de mod_expires module geladen.
Een andere waarschuwing die we in een prestatiecontrole kunnen krijgen, verwijst naar het inschakelen van compressie, en dit kunnen we ook eenvoudig oplossen door ons .htaccess-bestand bij te werken:
FilterDeclare COMPRESS FilterProvider COMPRESS DEFLATE resp = Inhoudstype $ text / html FilterProvider COMPRESS DEFLATE resp = Inhoudstype $ text / css FilterProvider COMPRESS DEFLATE resp = Inhoudstype $ text / javascript FilterChain COMPRESS FilterProtocol COMPRESS DEFLATE wijziging = yes; byteranges = nee
Dit compressieschema werkt met nieuwere versies van Apache (2.1+) mod_filter module. Het gebruikt de DEFLATE
compressiealgoritme om inhoud te comprimeren op basis van het antwoordinhoudstype, in dit geval specificeren we text / html
, text / css
en text / javascript
(wat sowieso het type bestanden zal zijn dat is gemarkeerd in PageSpeed / Yslow).
In het bovenstaande voorbeeld beginnen we met het declareren van het filter dat we willen gebruiken, in dit geval SAMENPERSEN
, de ... gebruiken FilterDeclare
richtlijn. Vervolgens vermelden we de inhoudstypen die we met dit filter willen gebruiken. De FilterChain
Vervolgens geeft de opdracht de server opdracht een filterketen te bouwen op basis van de FilterProvider
richtlijnen die we hebben vermeld. De FilterProtocol
richtlijn stelt ons in staat om opties op te geven die worden toegepast op de filterketen wanneer deze wordt uitgevoerd, de opties die we moeten gebruiken zijn change = yes
(de inhoud kan door het filter worden gewijzigd (in dit geval gecomprimeerd)) en byteranges = nee
(het filter mag alleen worden toegepast om bestanden te voltooien).
Op oudere versies van Apache, de mod_deflate module wordt gebruikt om DEFLATE-compressie te configureren. We hebben minder controle over hoe de inhoud in dit geval wordt gefilterd, maar de richtlijnen zijn eenvoudiger:
SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE tekst / html-tekst / css-tekst / javascript
In dit geval hebben we gewoon het compressie-algoritme ingesteld met behulp van de SetOutputFilter
richtlijn en geef vervolgens de inhoudstypen op die we willen comprimeren met behulp van de AddOutputFilterByType
richtlijn.
Gewoonlijk zal uw webserver een van deze modules gebruiken afhankelijk van welke versie van Apache in gebruik is. Over het algemeen weet u dit van tevoren, maar als u een generiek .htaccess-bestand maakt dat u op verschillende sites kunt gebruiken of dat u met andere mensen kunt delen en daarom weet u niet welke modules mogelijk in gebruik zijn, misschien wilt u beide bovenstaande codeblokken gebruiken
richtlijnen zodat de juiste module wordt gebruikt en de server geen 500-fout gooit als we proberen een module te configureren die niet is inbegrepen. Houd er rekening mee dat het ook relatief vaak voorkomt voor hosts die een groot aantal sites uitvoeren vanuit een enkele box om compressie uit te schakelen, omdat er een kleine CPU-prestatiehit is voor comprimeren op de server.
We hebben gekeken naar enkele van de meest gebruikte toepassingen voor .htaccess-bestanden en bekeken hoe we bepaalde taken kunnen uitvoeren die van bijzonder belang zijn voor ons als websitebouwers / -ondersteuners. Zoals het geval is met een inleidende tutorial van deze aard, worden de onderwerpen die we hebben behandeld gepresenteerd als inleidingen op een bepaald onderwerp. Er zijn veel andere opties en configuraties dan we hebben kunnen bekijken, dus ik raad ten zeerste aan om verder te lezen over elk onderwerp dat van bijzonder belang is.