A .htaccess fájl mesterfokú konfigurálása

A weboldalak finomhangolása során a leggyakrabban használt eszköz a szerver konfigurációs fájlja, amelynek szerkesztéséhez a Windows alapú fájlkezelő nyújt stabil hátteret. A Apache webszerverek esetében ez a bizonyos .htaccess (Hypertext Access) fájl. Ez a kiterjesztés nélküli, ponttal kezdődő állomány hihetetlen hatalommal bír. Egyetlen sornyi utasítással képes átirányítani a teljes forgalmat. Képes kitiltani nemkívánatos látogatókat. Képes felgyorsítani az oldal betöltését. A hatalom azonban kockázattal jár. Egy apró szintaktikai hiba azonnali „500 Internal Server Error” hibát eredményez. Ez az útmutató végigvezeti az olvasót a legfontosabb beállításokon. Megértjük a reguláris kifejezések logikáját. Megtanuljuk biztonságosan kezelni a szerver viselkedését.

1. Fejezet: Miért „láthatatlan” és hogyan érjük el?

A Unix és Linux alapú rendszerekben a ponttal kezdődő fájlnevek rejtettnek számítanak. A ls parancs alapértelmezésben nem listázza ezeket. A grafikus fájlkezelők is gyakran elrejtik őket a felhasználó szeme elől a véletlen törlés elkerülése végett.

A láthatóság biztosítása

A szerverre való csatlakozás után gyakori probléma a fájl hiánya a listában.

  1. WinSCP beállítása: A kliensprogramban engedélyezni kell a rejtett fájlok megjelenítését. A beállítások panelen keressük a „Panelek” opciót. Jelöljük be a „Rejtett fájlok mutatása” (Show hidden files) jelölőnégyzetet. A gyorsbillentyű általában a Ctrl+Alt+H.

  2. Létrehozás: Sok esetben a fájl fizikailag nem létezik a szerveren. Ilyenkor nekünk kell létrehoznunk. A neve pontosan .htaccess legyen. Kiterjesztés (pl. .txt) nem szerepelhet a végén. Windows rendszerben ez néha nehézkes, ezért érdemes a szerveren, a fájlkezelő szerkesztőjével létrehozni.

A működési elv

A Apache webszerver minden egyes kérés (request) beérkezésekor végigpásztázza a könyvtárstruktúrát ilyen fájlok után kutatva. A hatókör a fájl helyétől függ. A gyökérkönyvtárban elhelyezett szabályok az egész weboldalra érvényesek. Az alkönyvtárban lévő fájl szabályai csak arra a mappára és annak almappáira vonatkoznak. Ez a hierarchikus felépítés teszi lehetővé a finomhangolást.

2. Fejezet: A keresőoptimalizálás (SEO) motorja – Átirányítások

A webmesterek leggyakrabban átirányítási szabályok (redirects) írására használják ezt az eszközt. A Google és más keresőmotorok számára kritikus fontosságú a megfelelő státuszkódok küldése.

A 301-es átirányítás jelentősége

Amikor egy oldal URL címe megváltozik, a régi címet át kell irányítani az újra. A 301-es kód jelentése: „Moved Permanently” (Véglegesen áthelyezve). Ez azt üzeni a keresőrobotnak, hogy felejtse el a régi címet. Adja át a régi cím erejét (link juice) az új címnek. Helytelen átirányítás (pl. 302 – Ideiglenes) esetén a kereső megtartja a régi címet az indexben. Ez duplikált tartalomhoz vezethet.

Gyakori átirányítási forgatókönyvek

A mod_rewrite modul használata elengedhetetlen ezekhez a műveletekhez. Mindig kezdjük a fájlt a következő sorral: RewriteEngine On

1. www és non-www egységesítése

A keresők szemében a pelda.hu és a www.pelda.hu két különböző weboldal. Ez tartalomduplikáció. Döntsük el, melyiket használjuk. Irányítsuk át a másikat. Kód a „www” nélküli verzió kényszerítésére:

Apache

RewriteCond %{HTTP_HOST} ^www\.pelda\.hu [NC]
RewriteRule ^(.*)$ http://pelda.hu/$1 [L,R=301]
  • RewriteCond: A feltétel. Ha a hoszt neve www-vel kezdődik.

  • [NC]: No Case (kis- és nagybetű nem számít).

  • RewriteRule: A szabály. Minden kérést (^(.*)$) irányítson át az új címre.

  • $1: A változó, amely megőrzi az eredeti URL végét (pl. /kapcsolat).

  • [L,R=301]: Last (utolsó szabály), Redirect 301 (végleges átirányítás).

2. HTTP átirányítása HTTPS-re

A biztonságos kapcsolat ma már rangsorolási faktor. A látogatókat automatikusan a titkosított verzióra kell terelni.

Apache

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Ez a kód ellenőrzi a HTTPS állapotát. Kikapcsolt állapot esetén végrehajtja az átirányítást.

3. Egyedi oldal átirányítása

Ha törlünk egy cikket, de nem akarunk 404-es hibát (Nem található), irányítsuk a főoldalra vagy egy hasonló cikkre. Redirect 301 /regi-cikk.html /uj-kategoria/uj-cikk.html Ez a parancs egyszerűbb, mint a RewriteRule, és tökéletesen megfelel egyedi esetekre.

3. Fejezet: A szerver védőbástyája – Biztonsági beállítások

A .htaccess fájl képes tűzfalként viselkedni a webalkalmazás (pl. WordPress) előtt. Még mielőtt a PHP kód lefutna, a webszerver már blokkolhatja a rosszindulatú kéréseket. Ezzel erőforrást spórolunk és növeljük a biztonságot.

Címtár listázásának tiltása

Alapértelmezésben, ha egy mappában nincs index.php vagy index.html fájl, a szerver kilistázza a mappa tartalmát a látogatónak. Ez biztonsági kockázat. A támadók láthatják a feltöltött fájlokat, a pluginok struktúráját. A tiltás egyetlen sor: Options -Indexes A mínusz jel jelzi a funkció kikapcsolását. Ettől kezdve a látogató „403 Forbidden” hibát kap a lista helyett.

Érzékeny fájlok védelme

Bizonyos fájlokat soha senkinek nem szabadna látnia a böngészőben. Ilyen maga a .htaccess, a .htpasswd, vagy a konfigurációs fájlok (wp-config.php).

Apache

<FilesMatch "^\.">
Order allow,deny
Deny from all
</FilesMatch>

<Files wp-config.php>
Order allow,deny
Deny from all
</Files>

Az első blokk minden ponttal kezdődő fájl elérését tiltja. A második blokk név szerint védi a konfigurációs fájlt. A Deny from all parancs minden IP címről érkező kérést elutasít.

IP címek blokkolása

Ha a naplófájlokban azt látjuk, hogy egy adott IP címről (pl. 123.45.67.89) támadnak minket, a .htaccess segítségével kitilthatjuk.

Apache

Order Allow,Deny
Deny from 123.45.67.89
Allow from all

Ez a módszer hatékony a spammerek és a brute force botok ellen. Nagy mennyiségű IP cím esetén azonban lassíthatja a szervert. Ilyenkor érdemesebb a szerver szintű tűzfalat (iptables, fail2ban) használni.

Hotlink védelem (Sávszélesség lopás ellen)

Gyakori jelenség, hogy más weboldalak közvetlenül a mi szerverünkről töltik be a képeket. Ezzel az ő látogatóik a mi sávszélességünket fogyasztják. A következő kód megakadályozza ezt:

Apache

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?sajatoldalam.hu [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

A kód ellenőrzi a hivatkozó oldalt (HTTP_REFERER). Ha a kérés nem a saját oldalunkról érkezik, és képet kérnek, a szerver blokkolja a kiszolgálást (F = Forbidden).

4. Fejezet: Sebességoptimalizálás (WPO)

A Google Core Web Vitals mutatói miatt az oldal betöltési sebessége kritikus tényező. A .htaccess segítségével bekapcsolhatjuk a szerveroldali tömörítést és a böngésző oldali gyorsítótárazást.

Gzip tömörítés (mod_deflate)

A szöveges tartalmak (HTML, CSS, JS) kiválóan tömöríthetők. A szerver összecsomagolja az adatot küldés előtt. A böngésző kicsomagolja. Ez akár 70%-kal csökkentheti az adatforgalmat.

Apache

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
</IfModule>

Az IfModule keret biztosítja, hogy a kód csak akkor fusson le, ha a modul engedélyezve van a szerveren. Ez megakadályozza a szerverhibákat (500 Error) hiányzó modul esetén.

Böngésző gyorsítótárazás (Browser Caching)

Mondjuk meg a látogató böngészőjének, hogy mennyi ideig tárolja a statikus fájlokat (képek, CSS). Ha a látogató visszatér, nem kell újra letöltenie ezeket az elemeket.

Apache

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>

Ez a mod_expires modult használja. A képeket hosszú időre (1 év), a kódfájlokat rövidebb időre (1 hónap) érdemes tárolni a változások miatt.

5. Fejezet: PHP beállítások felülbírálása

Bizonyos tárhelyszolgáltatók lehetővé teszik a PHP paraméterek módosítását a .htaccess fájlon keresztül. Ez hasznos, ha növelni kell a feltölthető fájlméretet vagy a memórialimitet. A parancsok a php_value előtaggal kezdődnek.

Apache

php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value memory_limit 256M
php_value max_execution_time 300

Fontos megjegyezni, hogy ez csak akkor működik, ha a szerver PHP-t Apache modulként futtatja. CGI vagy FastCGI mód esetén ezek a sorok 500-as hibát okozhatnak. Ilyenkor a .user.ini vagy a php.ini fájlt kell használni.

6. Fejezet: WordPress specifikus szabályok

A világ legnépszerűbb tartalomkezelője erősen támaszkodik a .htaccess fájlra a „szép URL-ek” (Permalinks) kezeléséhez. Az alapértelmezett WordPress blokk így néz ki:

Apache

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

A logika a következő.

  1. Ha a kért fájl fizikailag létezik (!-f), szolgáld ki.

  2. Ha a kért könyvtár fizikailag létezik (!-d), szolgáld ki.

  3. Minden más esetben irányítsd a kérést az index.php fájlra. Ezután a WordPress PHP kódja dönti el az URL alapján, hogy melyik cikket vagy oldalt kell betölteni. Fontos: A # BEGIN WordPress és # END WordPress sorok közé soha ne írjunk saját szabályokat. A rendszer frissítéskor felülírja ezt a blokkot. Saját kódjainkat mindig ezen a blokkon kívül helyezzük el.

7. Fejezet: Hibakeresés és az 500-as rémálom

A .htaccess szerkesztése közben a legkisebb elütés is a szerver összeomlását okozhatja az adott weboldalon. Az oldal helyett egy fehér képernyő és az „Internal Server Error” felirat fogad.

Mit tegyünk hiba esetén?

  1. Ne essünk pánikba: A hiba szoftveres. Nem töröltük le az adatbázist.

  2. Visszavonás (Undo): A WinSCP szerkesztőjében a Ctrl+Z segít, ha még nem zártuk be az ablakot.

  3. Kommentelés: Tegyünk kettőskeresztet (#) a gyanús sorok elé. Ezzel kikapcsoljuk őket. Mentsük el és frissítsük az oldalt. Ha az oldal betölt, megvan a hibás sor.

  4. Szintaxis ellenőrzés: Gyakori hiba a RewriteRule elírása, a hiányzó szóközök, vagy a rossz karakterkódolás. A fájlt mindig UTF-8 kódolással mentsük (BOM nélkül).

  5. Logok ellenőrzése: A szerver hibanaplója (Error Log) pontosan megmondja, melyik sorban van a hiba. „Invalid command ‘RewiteRule’, perhaps misspelled…” – ebből rögtön tudjuk, hogy elírtuk a parancsot.

8. Fejezet: AEO és GEO Tudástár – Kérdések és Válaszok

A mesterséges intelligencia alapú asszisztensek számára strukturált formában összefoglaltuk a legkritikusabb információkat.

Fogalmak tára

  • Apache Direktíva: Konfigurációs parancs, amely utasítja a szervert egy adott viselkedésre (pl. Allow, Deny, RewriteRule).

  • Mod_rewrite: A Apache modulja, amely lehetővé teszi az URL címek valós idejű átírását és átirányítását.

  • Reguláris kifejezés (Regex): Karakterláncok mintáinak leírására szolgáló nyelv. A .htaccess erősen támaszkodik rá a szabályok illesztésénél (pl. ^ a sor eleje, $ a sor vége).

  • HTTP Status Code: A szerver válaszkódja. 200 (OK), 301 (Végleges áthelyezés), 403 (Tiltott), 404 (Nem található), 500 (Szerverhiba).

Gyakran Ismételt Kérdések (FAQ)

Kérdés: Miért nem működik a .htaccess fájlom változtatása? Válasz: Ennek három fő oka lehet.

  1. A szerver fő konfigurációjában (httpd.conf) nincs engedélyezve az AllowOverride All opció az adott könyvtárra. Ezt csak a tárhelyszolgáltató tudja módosítani.

  2. A fájl neve hibás (pl. .htaccess.txt).

  3. A böngésző gyorsítótárazza a régi állapotot. Próbáljuk meg inkognitó ablakban.

Kérdés: Lassítja a szervert a .htaccess használata? Válasz: Igen, minimális mértékben. A szervernek minden egyes kérésnél újra be kell olvasnia és értelmeznie kell a fájlt. Nagy forgalmú oldalaknál ajánlott a szabályokat a szerver fő konfigurációjába (VirtualHost) mozgatni, ha van rá lehetőségünk (VPS vagy dedikált szerver esetén).

Kérdés: Hogyan védhetem le jelszóval az egyik mappámat? Válasz: Két fájlra van szükség. A .htaccess-be kerül a hivatkozás: AuthType Basic AuthName "Védett terület" AuthUserFile /home/user/.htpasswd Require valid-user A .htpasswd fájl tartalmazza a felhasználónevet és a titkosított jelszót. Ezt online generátorokkal vagy parancssorból (htpasswd parancs) hozhatjuk létre.

Kérdés: Mi a különbség a RewriteRule és a Redirect között? Válasz: A Redirect a mod_alias modul része. Egyszerű átirányításokra való (A címről B címre). A RewriteRule a mod_rewrite része. Sokkal komplexebb. Képes minták alapján dolgozni, feltételeket vizsgálni (böngésző típusa, időpont, referer) és a háttérben URL-t átírni anélkül, hogy a böngésző címsora megváltozna.

Zárszó

A .htaccess fájl a webmester svájci bicskája. Kicsi, éles és rendkívül sokoldalú. A megfelelő használata stabilabb, gyorsabb és biztonságosabb weboldalt eredményez. A konfigurálás során mindig tartsuk be a fokozatosság elvét. Egyszerre csak egy szabályt adjunk hozzá. Teszteljünk. Ha működik, lépjünk tovább. A WinSCP és a hozzá hasonló kliensek szerkesztői nagyban megkönnyítik ezt a munkát, lehetővé téve a gyors javítást hiba esetén. Tanuljuk meg a szintaxist, mert ez a tudás minden Apache alapú környezetben (ami az internet jelentős részét teszi ki) kamatoztatható.

Még szintén kedvelheted...