A .htaccess (Apache webszerver egyik fájlja) tartalmának módosításával számos olyan feladatot lehet megoldani, melyet talán már több helyen is láttatok, tapasztaltatok, ám ki nem próbáltatok. Csak hogy párat említsek a lehetséges felhasználási területek közül:
– honlap egészének vagy egyes részeinek név/jelszavas védelme
– honlapod tartalmának más lapra linkelését le lehet tiltani
– egyéni hibalapok (pl. 404)
– látogatók tiltása IP alapján
– stb….
Mielőtt még bármely leírásnak és az ott olvasottak kipróbálásának nekiállnál, fontos hogy tisztázzuk: a .htaccess a fájl neve, és nem a kiterjesztése. Elejéről a pontot nem lehet lehagyni. Nem minden szerveren fog működni, csak ahol a rendszergazda megengedte az egyéni .htacess fájlok használatát (megjegyzem a legtöbb ingyenes tárhelyen nem engedélyezett tapasztalataim szerint, de próbálkozzatok, mert időközben változhat(ott) a helyzet).
A .htaccess fájlt minden esetben fel kell másolni a szerverre (ASCII módban), ajánlott „htaccess.txt” néven, majd az FTP kliens programod segítségével nevezd át „.htaccess”-re.
A .htaccess fájl mindig azt a könyvtárat – illetve a benne lévő alkönyvtárakat – védi, melyben elhelyezted. Ha a www.teneved.hu domain-ed gyökérkönyvtárába tetted, védeni fogja a www.teneved.hu -t, a www.teneved.hu/alkonyvtar1/ -t es az összes többit is.
.htaccess fájllal megoldható feladatok (a teljesség igénye nélkül)
– egyéni hibalapok
– jelszavas védelem
– SSI engedélyezése .htaccess-en keresztül
– látogatók tiltása IP alapján
– alapértelmezett fájl megváltoztatása (pl. index.html-ről indulolap.php)
– átirányítások
– .htaccess tartalom megtekintésének tiltása
– MIME típusok hozzáadása
– fájljaid direkt linkelésének (más honlapokra) tiltása
– könyvtárlistázás tiltása
Tartalomjegyzék
direkt linkelés tiltása
Ritka idegesítő dolog tud lenni, ha a lapod anyagát más ellopja, sokszor oly pofátlan módon hogy mégcsak le sem menti a fájlokat (kép, video, hang stb..), hanem egyből a te szerveredről linkeli be a saját lapjára. Ezt meggátolandó, a lap gyökérkönyvtárába helyezd el a .htaccess fájlt, az alábbi tartalommal (illetve ennek mintájára a saját domain nevekkel):
1 2 3 4 5 | RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?tutorial.hu(/)?.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://(.*\.)?gyik.com(/)?.*$ [NC] RewriteRule .*\.(wmv|avi|asf|mpg|mpeg|mp3|wav|zip|jpg|jpeg|gif|png)$ http://www.tutorial.hu/tiltottlinkeles.gi [R,NC] |
A kód 3-4. sorában azokat a domain-eket kell definiálni, ahonnan engedje a képek megnyitását. Az 5. sorban azokat a fájlkiterjesztéseket kell felsorolni, melyeket védjen a direkt linkelés ellen, illetve az 5. sor utolsó URL-e annak a képnek a hivatkozását tartalmazza, melyet a másik lapon az eredeti képek helyére meg fog jeleníttetni (a „gi” kiterjesztést azért kapta, mert előtte nemsokkal már a gif kiterjesztést letiltottuk). Pl. egy ötlet e kép tartalmához:
„E fájlt a www.teneved.hu lapról akarták belinkelni, de nem sikerült … kérlek nézd meg inkább az eredeti tartalmat.”
Persze nem csak képet lehet megadni, irányíthatod a látogatókat akár a kezdőlapodra is.
jelszavas védelem
A .htaccess módszerrel megoldható név/jelszavas védelemről már volt leírás a lapon, úgyhogy ezt a részt részletesebben ott tudod majd elolvasni. Itt most csak röviden annyit mondanék el, hogy alapvetően 2 fájlt kell elhelyezned a védendő könyvtárba. Az egyik a szokásos „.htaccess” lesz, a másik pedig a neveket és jelszavakat tároló „.htpasswd”.
A .htaccess fájl tartalma legyen az alábbi:
1 2 3 4 | AuthName "Protected Area" AuthType Basic AuthUserFile /usr/home/www/lapodcime/vedettkonyvtar/.htpasswd require valid-user |
Az 1. sorban a „Protected Area” helyére bármit beírhatsz, ez a név/jelszót kérő ablakban fog megjelenni.
A 3. sorban a .htpasswd fájlod abszolút hivatkozását kell bemásolni.
A „.htpasswd” fájl tartalma pedig a név:jelszó lesz. Minden párost 1-1 sorba kell elhelyezni (amennyiben több név/jelszó páros is van).
1 | teneved:$3$OCFDVae8H4vgQqG. |
Na most a nevet könnyű beírni, viszont a jelszót kódolva kell tárolni. Ez annyit jelent, hogy vmilyen módon (javaslom az online generátorokat erre a célra) be kell kódolni az általunk használni kívánt jelszót. Ehhez egy kis segítség:
1.) http://htpasswd.i-connector.com // itt be kell írnod a nevet és a jelszót (2x), erre generálja a párost melyet a fájlba kell majd másolnod
2.) // itt a lap alján egyszerre akár 5 párost is meg lehet adni
Látogatók tiltása/engedélyezése IP vagy domain alapján
Ez egy szintén nagyon hasznos szolgáltatás, sok kellemetlenséget meg lehet vele előzni. :) Pl. letilthatod egy vagy több IP, vagy akár IP tartomány hozzáférését a lapodhoz (hackerek ellen, floodolók ellen, vagy épp fordítva is használhatod: mindenkinek tiltod a hozzáférést, pár hely kivételével.
1 2 | allow, deny deny, allow |
Az order mindig 3 részből áll. Az elsőben azt kell meghatároznod, hogy a allow (engedélyez) és deny (tilt) paraméterek milyen sorrendben legyenek feldolgozva, tehát order allow,deny vagy épp order deny,allow.
A másodikban azt kell meghatároznod, hogy az első részben megállapított sorrend szerint (pl. order allow,deny esetében) kik férhetnek majd hozzá, illetve kik elől tiltod le a lapodat.
Ezek után már csak azt kell meadni – és ez a harmadik rész -, hogy kik nem férhetnek hozzá (deny) a tartalomhoz.
Egy részről nem esett még szó, ez a „mutual-failure”. Erről bevallom nem sokat tudok, így a szabilinux.hu apache2 konfigurálásából idéznék:
Nézzünk egy példát:
A .htaccess fájl tartalma az alábbi:
1 2 3 4 | order allow,deny allow from 123.45.6.7 allow from 012.34.5. deny from all |
A példában látottak szerint először megadtad, hogy a paraméterek milyen sorrendben kerüljön feldolgozásra (order allow,deny). Ezután a 123.45.6.7 IP-re, illetve a 012.34.5. IP tartománynak engedélyezted a belépést (allow from), és végül minden egyéb kliensnek megtiltottad (deny from all) a csatlakozást.
A fenti IP címek mintájára lehetőség van domain nevek alapján is engedélyezni/tiltani a látogatásokat, Pl. ha a .tutorial.hu beírod allow from .tutorial.hu formában, akkor engedélyezed a belépést a www.tutorial.hu-ról is, meg a pl. galeria.tutorial.hu-ról stb. is…
Nézzünk egy fordított helyzetet: mindenkinek engeded a kapcsolódást, kivétel pár IP cím:
1 2 3 4 | order deny,allow allow from all deny from 123.45.6.7 deny from galeria.tutorial.hu |
Ez esetben először feldolgozásra kerül a 123.45.6.7 és a galeria.tutorial.hu (tiltod őket), egyébiránt engedélyezed a kapcsolatokat mindenkinek.
Alapértelmezett fájl módosítása
Minden szerveren van egy olyan beállítás, mely azt határozza meg, hogy egy könyvtár nevét beírva mely fájlok jelenjenek meg először/alapértelmezetten. Ez általában egy index.html vagy index.htm, index.php szokott lenni, de tetszés szerint módosítható.
Ehhez mindössze a .htaccess fájlba kell az alább sort felvenni
1 | DirectoryIndex fajlneve.html |
A „fajlneve.html helyett azt kell beírni, amit Te szeretnél alapértelmezettnek. Mivel nem biztos, hogy az általunk beállított fájl létezni fog a könyvtárban (illetve nem biztos, hogy minden könyvtárban lesz), érdemes több fájlt is beállítani.
1 | DirectoryIndex fajlneve.html fajlneve.htm fajlneve.php default.htm |
Átirányítások
Ha a honlapod (vagy egy része) módosul, új helyre költözik, az átirányítást többféleképpen is meg lehet oldani. Az egyik ilyen a .htaccess-es, mikor a tartalmát az alábbi szerint kell alakítani:
1 | Redirect /regikonyvtar/regifajlneve.html http://www.honlapodcime.hu/ujkonyvtar/ujfajlneve.html |
Arra figyelj, hogy 3 részből kell állnia, melyek között 1db space kell legyen. Először is van a „Redirect” parancs, majd a régi cím és végül az új cím. A hivatkozások mindig a root könyvtárhoz képest relatívak.
Az átirányításnál nem feltétlenül szükséges fájlnevet is megadni, csinálhatod így is:
1 | Redirect /regikonyvtar/ http://www.honlapodcime.hu/ujkonyvtar/ |
Könyvtárlistázás tiltása vagy engedélyezése
A szerverek többségén az alapértelmezett könyvtárlistázást le szokta tiltani az admin, viszont előfordulhat, hogy olyan szerverre keveredsz ahol mégsem, neked pedig kellemetlen a dolog. Ilyenkor jön a .htaccess, melybe az alábbi tartalmat kell felvenni:
1 | IndexIgnore * |
A * egy olyan jokerkarakter, melynek köszönhetően a tiltás minden fájlra vonatkozik.
Ebből következik, hogy lehetőség van csak bizonyos fájltípusok tiltására is. Pl. az alábbi tartalmat kell beállítani, ha csak a GIF és JPG képek listázását akarod tiltani:
1 | IndexIgnore *.gif *.jpg |
Ilyenkor minden fájl fog listázni (pl. txt, html, htm, php stb..), kivétel a fenti kettő.
Amennyiben a szitu pont ellenkezője a fent vázolt helyzetnek, tehát a könyvtárlistázást letiltották de neked szükséged lenne rá, akkor a .htaccess tartalma az alábbi legyen:
1 | Options +Indexes |
Ennek használata közben légy nagyon óvatos, nehogy olyan fájlok maradjanak fent a szerveren, melyek privát cuccok és nem akarod közreadni.
Ha a könyvtárba elhelyezel egy HEADER fájlt, annak tartalma még a könyvtárlistázás előtt meg fog jelenni. A könyvtárban elhelyezett README pedig a listázás után fog megjelenni.
Tisztelt Tutorial!
A safe_mode és a register_globals ki-be kapcsolása is lehetséges?
Köszönettel.
János: tudtommal igen, az alábbi módon:
Tisztelt Tutorial!
Egy appserv van telepítve egy windows XP-re és azt szeretném elérni, hogy bizonyos könyvtárakat csak bizonyos felhasználók érhessenek el. Sajnos fix IP címük nincs, ezért domain név alapján azonosítanám őket:
létrehoztam a .htaccess fájlt a könyvtárban
order deny,allow
allow from user1.dynalias.com
allow from user2.dynalias.com
deny from all
Sajnos mégsem müködik. Ők sem érik el. pedig ha a allow from user1.dynalias.com sort átírom az ideigelnes ip címükre: allow from xxx.xxx.xxx.xxx, akkor müködik.
Egy problémám volna a mod_rewrite subdomain átirányítással.
xy.domainom.hu -t szeretném, ha domainom.hu/xy könyvtárra mutasson, de az a gond, hogy xy az egy változó tehát lehet akármi más..
TIA
„Nézzünk egy fordított helyzetet: mindenkinek engeded a kapcsolódást, kivétel pár IP cím:”
itt nem jól van formázva a szöveg… kicsit félreértheő a dolog, a /fieldlist miatt…
de, amúgy köszönöm a leírást, értékes bejegyzés…
Köszi, rossz helyen zártam le egy pre-t, most javítottam. :)
Hi!
A .htaccess-el lehetséges, hogy csak egy darab fájlt tiltsak? Azaz ha valaki ismeri a fájl elérési útját ami legyen valami.php vagy bármilyen más kitejesztésü, akkor azt ne nyithassa meg, és le sem tölthesse?
ui.:
Én viszont akár saját, akár egy távoli gépről a cím ismeretében valamilyen formán elérhessem.
THX
Köszönöm szépen. Megoldottam ;)
ami úgy néz ki, hogy
.htaccess fájlban:
AuthType Basic
AuthName „AZONOSÍTÁS”
AuthUserFile „a jelszót tároló fájl elérési útja a jelszót tároló fájllal együtt”
require valid-user
A jelszót tároló fájl:
felhasználó:jelszó páros
Üdv!
Megoldható az valahogyan, hogy ha a egy portálon a linkelés úgy van megoldva, hogy .hu?cikkazonosito címre jön be egy adott aloldal, akkor ha valaki lehív egy ilyen formában megadott linket, akkor a szerver automatikusan átirányítsa .hu/index.php?cikkazonosito címre? Tehát valami olyan szabályt kéne megadnom, hogy ha van ? a lekért webcímben, akkor automatice tegye be a link közepébe az index.php tag-et…
Előre is kösz a segítséget!
CzB
Szerintem nézd meg ezt a linket: http://prog.hu/tudastar/89648-4/+htaccess+PHP+fajl+elrejtese+az+url-ben.html
Ez ugyan egy kicsit más, mint ami neked kell, de ez alapján meg tudod csinálni.
forditott eset, hogy mukodik? amikor adott egy „fo” domain, es az oda vannak linkelve parkolt domainek. Azokat hogy tudom egy alkonyvtarba iranyitani?
pl: http://www.fodomain.hu, http://www.masikdomain.hu <- ez utobbi betolti a fodomain.hu-t. viszont ena http://www.fodomain.hu/masik/index.html-t szeretnem, de ugy hogy at url ne legyen ujrairva, azaz maradjon: http://www.masikdomain.hu/masik/.
lehetseges ez?
Sziasztok!
Az lenne a kérdésem, hogy hogyan oldható meg az, hogy kiirja az index.php-t is szerver.
Tehát, ha begépelem a hxxp://www.oldalam.hu címet a hxxp://www.oldalam.hu/index.php jelenjen meg.
Váloszotok előre is köszönöm: Laci
Ez erdekelt volna engem is, de en tudtam azt, hogy php_flag register_globals off
csak azt nem tudom, hogy ezt hova irjam bele?
Persze a .htacces file-ba, de mindegy, hogy az elejere vagy a vegere, vagy hogy milyen parancs ele vagy utan?
A drupalt akarnam telepiteni, es azert kerll letiltsam a register_globalst,
Nyugodtan irhatom oda, ahol van /opt/lampp/lib/php/file mappaban van
vagy hozzak letre egy uj htacces filet es ha igen, akkor hova tegyem?
Segítséget szeretnék kérni, hogyan tudnám megoldan, hogy egy adott országott kitiltsak, de jelszóval innen is be lehessen lépni, más orságból viszont ne kelljen jelszó és tiltás se legyen?
Hello!
Én azt szeretném emgcsinálni h a .php/.html/stb… kiterjesztés lemaradjon a linkből. pl van a szerveren egy menu.php, akkor a linken csak http://www.oldal.hu/menu legyen.
Előre is köszöntem üdv
Elvileg ez megcsinálja (nem ellenőriztem):
Amit még írtak hozzá, hogy az apache szervert újra kell indítani, törölni kell a böngésző cache-t.
Ha bármi gond lenne vele, akkor a neten a „hide .php extension” kifejezéssel tudsz keresni (akár kombinálva az apache, htaccess szavakkal.
Hát ez nekem nem jött össze, de azért kösz a segítséget
Köszi, hasznos cik!!!
Sziasztok!
A jelszavas védelem nálam érdekesen működik. A .htpasswd fájlba ha ezt írom: alma:a2qaNohJ3mqjQ
és bejelentkezésnél beírom, hogy alma, jelszónak: korte , akkor nem enged be. Ha viszont azt írom be, hogy alma, jelszónak pedig: a2qaNohJ3mqjQ, akkor igen.
Mit kéne beállítanom, hogy tudja a szerver, hogy a .htpasswd-ben lévő jelszó „kódolva” van?
Előre is köszi!
Tisztelt Tutorial!
Ezen remek írás nyomán én is csináltam egy saját .htaccess filt ami remekül működi is, de egy problémára sehol sem találtam megoldást !
Történetesen arról volna szó, hogy a bekért jelszó után megnyitja az oldalt (ami idáig rendben is lenne), viszont amikor elmegy az oldalról, majd visszatér akkor nem kéri a jelszót ujjra.
Hogyan lehetne kiküszöbölni eszt valahogyan ??
Előre is köszönöm !
Sziasztok!
Azt hogy ne http://eleres.hu jelenjen meg, hanem eleres.hu/index,sztem a redirect parancsal meg lehet oldani, legalább is ezt gondolom, azok alapján amit olvastam.
Próbáljátok ki.
Sziasztok!
Joomlaval lenne egy olyan problémám, hogy nem igazán sikerül a redirectet működésre bírni. Annyira sikerült rájönnöm, hogy a Joomla által betett Sef-es rész bekavar az én egyszerű rewriterule-jaimnak.
########## Begin – Joomla! core SEF Section
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
RewriteRule (.*) index.php
RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
#
########## End – Joomla! core SEF Section
Ez a Joomla Sef kódja, és ha ez megy, akkor az én szabályaim nem mennem, hanem sima 404es hibával elszállnak. Valaki tudna segíteni ebben?
Az lenne a kérdésem hogyan lehet megoladni pl http://www.domain.hu/index.php?p=1 helyett url-be a http://www.domain.hu/valami lehessen beírni és ez a index.php?p=1 -re mutasson de at urlben a /valami maradjon.
Köszönöm
Sziasztok.
Aldomain átírányításhoz lenne kérdésem.
én pl. az aldomain.fodomain.hu -t szeretném átírányítani a fodomain.hu/Mérőhely -re
kérdésem az megoldható-e úgy ha a .htaccess fájl-al probálnám hasonlóan mit fentebb írtátok
Redirect /regikonyvtar/regifajlneve.html http://www.honlapodcime.hu/ujkonyvtar/ujfajlneve.html
hez hasonlóan de akkor meg mit irjak a /regikonyvtar/regifajlneve.html helyére mert nekem nincs ott (nem szükséges)fájl meg könyvtár?
Köszönettel: Kövics László
Az ilyen htpassword generátorokban meg lehet bízni? (gondolom igen, de hátha nem)
Szerintem igen, de ha vmi gyanús, akkor generáld le a kódot egy másikban is (több ilyen online htaccess generator is van a neten) és hasonlítsd össze őket. :)
Sziasztok azt szeretném megkérdezni, hogy ugyan működik az url végén lévő .php elhagyás de ha pl olyan linkel irom be hogy valami.php akkor viszont megjelenik.
Hogy tudnám átirányítani hogy sehogyse jelenjen meg a .php?
Előre is köszönöm a segítséget.
Üdv!
Azt meg lehet csinálni valahogy, hogy egy adott mappán belül csak az .xyz kiterjesztésűek legyenek jelszóval védettek?
Kösz!
Hali!
Nekem nem fogadja el a jelszót amikor beakarom írni, pedig szerintem mindent úgy csináltam ahogy le van írva. Mindkét fájlt feraktam. ha vki tud segiteni pls! :s:S
Hogy lehet elérni azt, hogy a valami.tld/1/2 alakot beírva átirányítson a valami.tld/akarmi.php?ez=1&az=2 alakra?
Kösz előre is :D
Valakinek van használható kódja vagy linkje az URL rewrite témában?
Van egy youtubos videó, ami jónak tünik, nekem nem nagyon működött, de sejtem mit rontottam el:
http://www.youtube.com/watch?v=ZgCW2x5QCXo
Az megoldható htaccess-el, hogy a mappán belül minden filenak ugyanaz az ikonja?
Úgy, hogy nincs benne minden html (php) fileban.
Előre is köszönöm!
Ha nem jó linket adsz meg, sose kapsz választ a kérdésre. „Rosszul formázott videoazonosító van az URL-ben.”
Igazából énn jót adtam meg, valószínűleg a más karakterkódolás matt van:
http://www.youtube.com/watch?v=ZgCW2x5QCXo
a %D7-t ki kell cserélni x-re.
A módosított link sem jó:
The URL contained a malformed video ID.
Küldd el a jó URL-t mail-ben és átírom a hozzászólásból, de ne legyen offolva a téma egy rossz URL miatt. txh.
Sziasztok
Ez a fájl kiterjesztés elhagyása engem is érdekelne hogy ne .php vagy ne .html legyen.
Addig is itt van két link a htaccess készítéséhez hátha hasznát veszitek.
http://www.htaccesseditor.com/en.shtml
http://phpstudio.hu/?action=implements&subaction=htaccesstool
Sziasztok
Session beállításokat hogyan lehet elvégezni? Nem nagyon találtam róla leírást sehol.
Előre is köszönet… :)
Köszi, érdekes cikk
Sziasztok!
Segítsetek! /reg/of/ linket szeretnék egy szimpla nem reg nevű php-ra irányítani.
mindkettőre a register.php jön be, illetve ha nem ez a php neve, akkor 404
többnyire ilyen átirányításaim lennének.
Előre köszönöm
nah! hat en elag sokat elszenvedtem ezzel, mar nem tudom kik, de tobben is azon vacakoltak amin en, azaz hogy nem fogadja el a jelszot…
vegul php-val oldottam meg kb google/kurtfobol, kell hozza egy kis fuggveny amit az index elejen meg kell hivni:
Sziasztok!
subdomaineket szeretném tiltani .htaccess-el.
Pl: valami.mydomain.hu helyett hiba oldal jöjjön be, vagy a mydomain.hu oldal.
Meg lehet ezt oldani? Köszi a segítséget.
Sziasztok!
Azt szeretném megoldani, hogy a htaccess-el készítek egy könyvtárlistázást, de ugyan akkor le is akarom védeni jelszóval az egész könyvtárat. Az Options -Indexes parancs működik is ha csak ez van a htaccess fileba, de ha elé, mögé stb írom a jelszavas védelmet, máris nem listázza ki a könyvtár tartalmát. Tud valaki erre valami megoldást? Előre is köszi!
Rosszul írtam, Options +Indexes…ezt követi a jelszavas parancs sorok és a jelszót kéri, be is enged de nem listázza ki a könyvtárat..
Üdv!
Én letöltésre kettős védelmet használok. Egyszer belép a rendszerbe, illetve letöltésnél egy .htaccess + .htpasswd védi a könyvtárat.
Ami a bajom, hogy nem találtam rossz jelszóbevitel esetén elegáns megoldást, vagyis a szabvány 500 as oldal jelenik meg.
Mit tegyek és melyik fájlba, hogy mondjuk rossz jelszó esetén átirányítás történjen pl a /gyik.html oldalra?
Köszi előre is.
Sziasztok! Adott egy phplist hírlevélküldő, amihez képeket, csatolmányokat tartalmazó mappák tartoznak. Le szeretném tiltani a Könyvtár listázást, de LAN-ból viszont továbbra is szükségem van rá a fájl elérési útvonalak megadása miatt. A -indexes mindenhol letiltja, ha pedig az allow,deny-vel játszok, akkor bentről minden megy, de kintről nem tölti be a képeket sem. Tehát olyan megoldásra lenne szükségem, ahol LAN felől látszanak a könyvtárak és fájlok, WAN felől pedig csak a fájlok látszanak, könyvtárakat nem lehet tallózni. Ötlet?