URL átírások, Apache mod-rewrite

apache“Sok tonnányi leírás és példa ellenére a mod_rewrite voodoo. Átkozottul jó voodoo, de még mindig csak voodoo.”

(Brian Moore)
Mivel magyarul egyáltalán nem találtam egy normális összefüggő leírást az Apache mod_rewrite moduljáról, figyelembevéve a fenti kijelentést, gondoltam megpróbálok összeállítani egy rövid, összefoglaló cikket erről a jól konfigurálható ügyes kis modulról.

Előszőr nézzük a konfigurációs beállításokat, aztán pedig hozzunk létre egy saját .htaccess file-t ezek alapján!

Konfigurációs beállítások

RewriteEngine

Szintakszis: RewriteEngine on|off

A
RewriteEngine direktívával engedélyezhetjük vagy tilthatjuk a Rewrite
modul futását. Alapértelmezésben off-ra van állítva, és ha tiltani
akarjuk a Rule-okat akkor célszerű ezt off-ra állítani mindne egyes
Rule kikommentezése helyett.

RewriteOptions

Szintakszis: RewriteOptions Opció

Ezzel a direktívával speciális beállításokat kapcsolhatunk be. Az opciók a következők lehetnek:

inherit
A jelenlegi konfiguráció a szülő konfigurációját
örökli. Ez virtuális szervernél a fő szerver szabályainak az öröklését
jelenti, a .htaccess file esetében a szülő könyvtár .htaccess file
beállításainak öröklését jelenti.
MaxRedirects=szám
Annak elkerülése érdekében, hogy a
szabályaink végtelen ciklust hozzanak létre az alapbeállítás 10, vagyis
10 átírányítás után az átirányítások leállnak egy “500 Internal Server
Error”-ral.

RewriteLog, RewriteLogLevel, RewriteLock, RewriteMap

Ezeket a beállításokat nem lehet a lokális .htaccess fileokból
állítgatni. Így ezekről most nem írok, aki kíváncsi rájuk olvassa el a
forrásoknál felsorolt linkeken.

RewriteBase

Szintakszis: RewriteBase URL

Ez
a direktíva beállítja az alap URL-t a könyvtárfüggő (.htaccess)
szabályokhoz. Az itt megadott könyvtárnév automatikusan le lesz véve a
vizsgált URL-ből és a szabályok végén automatikusan hozzáadásra kerül.
Ha a webszerver URL-jei nem közvetlenül feleltethetőek meg a
fizikai file elérési utakkal, akkor minden .htaccess fileban használni
KELL a RewriteBase direktívát ha használni akarod a RewriteRule
direktívát is.

RewriteCond

Szintakszis: RewriteCond TesztString FeltételMinta

A
RewriteCond direktívával tudunk feltételes szabályokat létrehozni. Az
ezt követő RewriteRule csak akkor kerül végrehajtásra, ha maga a
szabály és az őt megelőző RewriteCond is teljesül.

A TesztString a következő elemekkel egészíthető ki:

RewriteRule hivatkozás $N
(0 <= N <= 9) ami elérést biztosít a kapcsolódó RewriteRule mintában található zárójelekkel létrehozott részhez.
RewriteCond hivatkozás %N
(1 <= N <= 9) ami elérést biztosít a legutolsó egyező RewriteCond minta részeihez.
RewriteMap bővítés ${mapname:key|default}
Szerver változók %{VÁLTOZÓ}
ahol a szerverváltozók a következők lehetnek:

  • HTTP_USER_AGENT
  • HTTP_REFERER
  • HTTP_COOKIE
  • HTTP_FORWARDED
  • HTTP_HOST
  • HTTP_PROXY_CONNECTION
  • HTTP_ACCEPT
  • REMOTE_ADDR
  • REMOTE_HOST
  • REMOTE_USER
  • REMOTE_IDENT
  • REQUEST_METHOD
  • SCRIPT_FILENAME
  • PATH_INFO
  • QUERY_STRING
  • AUTH_TYPE
  • DOCUMENT_ROOT
  • SERVER_ADMIN
  • SERVER_NAME
  • SERVER_ADDR
  • SERVER_PORT
  • SERVER_PROTOCOL
  • SERVER_SOFTWARE
  • TIME_YEAR
  • TIME_MON
  • TIME_DAY
  • TIME_HOUR
  • TIME_MIN
  • TIME_SEC
  • TIME_WDAY
  • TIME
  • API_VERSION
  • THE_REQUEST
  • REQUEST_URI
  • REQUEST_FILENAME
  • IS_SUBREQ

A FeltételMinta egy sztenderd reguláris kifejezés pár kiegészítéssel.

  1. A minta előtt meg lehet adni egy !-et, ezzel tagadjuk a mintát,
    vagyis az ezt követő szabály akkor kerül végrehajtásra, ha a TesztSring
    nem passzol a megadott mintára
  2. Elérhető pár speciális FeltételMinta megadása is. Reguláris kifejezés helyett használhatók a következők:
    <'FeltételMinta'
    A feltételMintát sima sztirngként kezeli és azt vizsgálja, hogy lexikálisan kisebb-e mint a TesztString.
    ‘>FeltételMinta’
    A feltételMintát sima sztirngként kezeli és azt vizsgálja, hogy lexikálisan nagyobb-e mint a TesztString.
    ‘=FeltételMinta’
    A feltételMintát sima sztirngként kezeli
    és azt vizsgálja, hogy lexikálisan megyezik-e a TesztStringgel, azaz
    betűről betűre azonosak-e.
    ‘-d’ (könyvtár?)
    Megvizsgálja, hogy a TesztString egy létező könyvtár-e.
    ‘-f’ (file?)
    Megvizsgálja, hogy a TesztString egy létező file-e.
    ‘-s’ (file mérettel?)
    Megvizsgálja, hogy a TesztString egy létező file-e és mérete nagyobb-e mint 0.
    ‘-l’ (szimbolikus link)
    Megvizsgálja, hogy a TesztString egy szimbolikus link-e.
    ‘-F’ (létező file via subrequest)
    Megvizsgálja, hogy a
    TestString egy létező file-e, és elérhető-e a szerver konfigurációjában
    szereplő elérési korlátozások szerint.
    ‘-U’ (létező URL via subrequest)
    Megvizsgálja, hogy a
    TestString egy létező URL-e, és elérhető-e a szerver konfigurációjában
    szereplő elérési korlátozások szerint.

Ezeket kiegészítve használhatók az alábbi flag-ek (vesszővel elválasztott listaként) is mint a RewriteCond direktíva harmadik argumentuma.

‘nocase|NC’ (no case: ne figyelje a betűméretet)
Ennek a
flag-nek a hatására a FeltételMinta és a TesztString nem lesz érzékeny
a kis és nagybetűk közötti különsbségre, azokat azonosnak tekinti.
‘ornext|OR’ (or next condition: vagy a következő feltétel)
Ennek
a flag-nek a hatására az alapértelmezett ÉS logikai kapcsolat helyett
az egyes RewriteCond direktívákat VAGY logikai kapcsolattal kezelhetjük.

RewriteRule

Szintakszis: RewriteRule Minta Helyettesítés

A
RewriteRule directíva a tényleges URL átíró utasítás. A directíva több
mit egyszer is előfordulhat, külön-külön szabályt alkotva. A szabályok
sorrendje fontos, mert a .htaccess file-ban lévő sorrendben hajtódnak
végre.

A Minta egy reguláris kifejezés amit az
aktuális URL-lel hasonlít össze a szabály. Az aktuális itt azt jelenti,
hogy ezt a szabályt megelőző szabályok már modósíthatták az eredeti, a
user által beírt URL-t.

Pár szóban a reguláris kifejezésekről.

A reguláris kifejezés egy minta amit egy karaktersorozat általános
leírására, összehasonlítására alkalmazhatunk. A következő táblázat
mutatja, hogy melyik jel mely karaktereket helyettesít a reguláris
kifejezésekben.

  • Szöveg
    . (pont)
    Bármilyen karakter
    [karakterek]
    Karakter osztály: bármely a zárójelek között felsorolt karakterek közül
    [^karakterek]
    Karakter osztály: egy sem a zárójelek között felsorolt karakterek közül
    szöveg1|szöveg2
    Alternatívák: szöveg1 vagy szöveg2
  • Számlálók
    ?
    0 vagy 1 a megelőző szövegből
    *
    0 vagy több a megelőző szövegből
    +
    1 vagy több a megelőző szövegből
  • Csoportosítás
    (szöveg)
    Szöveg részekre bontása zárójelekkel, vagy
    határolóelemként alternatív szövegek meghatározásához, vagy padig
    hivatkozások létrehozásához ($N)
  • Helymeghatározók
    ^
    A szöveg eleje
    $
    A szöveg vége
  • Escaping
    karakter
    Ezzel tiltjuk, hogy egy speciális karakter speciálisan legyen értelmezve

A Helyettesítés egy sztring ami az
eredti mintát helyettesíti vagy kiegészíti. Használhatók benne a
hivatkozások melyek a szabályra utalnak ($N), hivatkozások melyek a
feltételre utalnak (%N), szerver változók és mapping funkciók.

Speciális
helyettesítő parancs a ‘-‘, aminek a hatására nem történik
helyettesítés. Ez első olvastra furán hangzik, de a ‘C’ flag
ismeretében értelmet fog nyerni.

A RewriteRule direktíva harmadik argumentumaként használhatjuk az alábbi flag-eket:

‘redirect|R [=code]’ (force redirect)
Közvetlen
átirányítás. A Helyettesítés-nek egy létező URL-nek kell lennie,
máskülönben egy nemlétező helyre irányítjuk át a usert.
‘forbidden|F’ (force URL to be forbidden)
Egy 403-as HTTP response-t (FORBIDDEN) küld vissza. Egy ehhez tartozó RewriteConds direktívával blokkolhatunk bizonyos URL-eket.
‘gone|G’ (force URL to be gone)
eEgy 410-es HTTP response-t
(GONE) küld vissza. Többé már nem létező lapokat jelölhetünk meg vele.
(pl azzal a céllal, hogy a keresők kivegyék az indexükből az oldalt.)
‘proxy|P’ (force proxy)
A kérés proxy kérésként lesz kezelve, így automatikusan átadódik a proxy modulnak.
‘last|L’ (last rule)
Megállítja az átíró folyamatot ennél a szabálynál, nem hajtja végre az ezt követő szabályokat.
‘next|N’ (next round)
Újraindítja az átíró folyamatot
(újrakezdi az első szabálynál). Ebben az alfolyamatban nem az eredeti
URL-t fogja vizsgálni, hanem az éppen aktuálisat.
‘chain|C’ (chained with next rule)
Összekapcsolja a
jelenlegi szabályt a következővel. Ha a szabály egyezik akkor a normál
menet szerint a következőt is vizsgálni fogja, de ha a jelenlegi
szabály nem egyezik akkor a következőt NEM vizsgálja.
‘type|T=MIME-type’ (force MIME type)
A cél file MIME-type-ját állítja be./dd>
‘nosubreq|NS’ (used only if no internal sub-request)
‘nocase|NC’ (no case)
A mintát érzéketlenné teszi a kis és nagybetűk közötti különbségekre.
‘qsappend|QSA’ (query string append)
A jelenlegi URL-hez hozzá tudunk fűzni további adatokat.
‘noescape|NE’ (no URI escaping of output)
Ne használja az escape eljárást
‘passthrough|PT’ (pass through to next handler)
‘skip|S=num’ (skip next rule(s))
Ha a jelenlegi szabály végrehajtódik akkor a következő ‘num’ db szabályt nem vizsgája, nem hajtja végre.
‘env|E=VAR:VAL’ (set environment variable)

Minta .htaccess file

Először is kapcsoljuk be a RewriteEngine-t és maximalizáljuk a lehetséges átírások számát, nehogy végtelen ciklusba jussunk.

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteOptions MaxRedirects=10
</Ifodule>

Adjuk meg az alkönyvtár nevét is amiben éppen vagyunk,
ahhhoz, hogy az átírásaink jól működjenek. Ez persze nem kell ha a
websiteunk főkönyvtárában lévő .htaccess filet szerkesztjük.

RewriteBase /gora

Első lépésként azt szeretnénk, hogy a CMS-ünk által
generált rendkívül rusnya URL-t emberek számára is olvashatóvá tegyük.
http://webmania.cc/index.php?modul=recept&recept=23 URL-t
szeretnénk egyszerűsíteni és átirni a http://webmania.cc/receptek/23
formátumra. Illetve ez nem teljesen igaz. Azt szeretnénk, hogy ha a user (vagy maga a CMS) egy http://webmania.cc/receptek/23 kinézetű URL-t kér le a webszervertől, akkor az ezt a háttérben, a user számára láthatatlanul alakítsa át arra a valódi URL-re amin ez a tartalom megtalálható (http://webmania.cc/index.php?modul=recept&recept=23)
A szabályban a $2 a második zárójelek közötti részt jelenti, vagyis esetünkben a 23-at, a harmadik zárójelben lévő kifejezés pedig arra szolgál, hogy akár perjellel, akár a nélkül zárja le a user a beírt URL-t a szabályunk működjön. Mivel ha a vizsgált URL illeszkedik erre a mintára már nem akarunk semmilyen más átalakítást végezni vele kitesszük az [L] flaget.

Az átírási szabályoknál figyelni kell a következőre. Esetünkben ha van a domainünknek egy a receptek mintára illeszkedő file-ja / könyvtára, akkor az oda mutató linkek használhatatlanná válhatnak. Pl az “imgrecept” nevű könyvtárban lévő képek elérhetetlenné válnak, mivel a szabályunk a http://webmania.cc/imgrecept/borfi.jpg hivatkozást át fogja alakítani a http://webmania.cc/index.php?modul=recept URL-re. Ez ellen két módon védekezhetünk. Vagy gondoskodunk arról, hogy a létező fileokat kiszolgálja, vagy pedig óvakodunk az olyan hivatkozások használatától aminek a mintája illeszkedik valamely létező könyvtár vagy filenévre.

RewriteRule ^(.*)receptek/([^/]+)(/*)$ index.php?modul=recept
   &recept=$2 [L]

Ugyanezzel a módszerrel alakítsuk át a http://webmania.cc/index.php?lap=17 típusú hivatkozásokat. Ezt mondjuk úgy szeretnánk olvasható URL-lé alakítani, hogy http://webmania.cc/lap/17.

#kategoriák rövid számos elérése
   RewriteRule ^(.*)lap/(.*)$ index.php?lap=$2 [L]

Hasonlóan a http://webmania.cc/index.php?kategoria=17 is ronda egy URL. Ez mondjuk egy kiemelt téma, kétféleképpen is szeretnénk átalakítani (a sorrend ugye fontos):

  1. http://webmania.cc/rovat/17
  2. http://webmania.cc/hirek (bizonyos feltétel esetén, mondjuk a domain név alapján ha a .htaccess fileunk több domaint is kiszolgál)
#kategoriák rövid számos elérése
   RewriteRule ^(.*)rovat/(.*)$ index.php?kategoria=$2 [L]
#weblap specifikus rész
   #krisnavolgy.hu
      RewriteCond %{SERVER_NAME} krisnavolgy.hu
      RewriteRule ^(.*)hirek(.*)$ index.php?kategoria=17 [L]

Itt is használtuk az [L] flaget, mert nem kívánunk több átalakítást végezni ha a minta passzol. A weblapspecifikus rész csak akkor fog végrehajtódni, ha a feltétel teljesül, vagyis ha a domainnév krisnavolgy.hu. RewriteCond esetén figyelnünk kell arra, hogy csak a közvetlenül utánna következő egy RewriteRule-ra fog a feltétel érvényesülni. Tehát ha több szabályt is akarunk alkalmazni ugyanarra a feltételre akkor azt többször meg kell adni.

Végül ha a user nemlétező URL-t akar meghívni akkor irányítsuk rá a nyitóoldalra, és az általa kért nemlétező címet tegyük be a hack nevű $_GET változóba.

   #ha nincs favicon
   RewriteCond %{REQUEST_FILENAME} !favicon.ico [NC]

#ha nemlétező a file RewriteCond %{REQUEST_FILENAME} !-f

#ha nemlétező a könyvtár RewriteCond %{REQUEST_FILENAME} !-d #akkor legyen átirányítás RewriteRule ^(.*)$ index.php?hack=$1 [QSA]

És akkor lássuk az egészet együtt.

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteOptions MaxRedirects=10

#Ebben az alkonyvtarban vagyunk, ezt figyelembe kell venni RewriteBase /gora

RewriteRule ^(.*)receptek/([^/]+)(/*)$ index.php?modul=recept &recept=$2 [L] RewriteRule ^(.*)receptek$ index.php?modul=recept [L]

#a lap/72 tipusúak átírása RewriteRule ^(.*)lap/(.*)$ index.php?lap=$2 [L] #kategoriák rövid számos elérése RewriteRule ^(.*)rovat/(.*)$ index.php?kategoria=$2 [L] #weblap specifikus rész #krisnavolgy.hu RewriteCond %{SERVER_NAME} krisnavolgy.hu RewriteRule ^(.*)hirek(.*)$ index.php?kategoria=66 [L] RewriteCond %{SERVER_NAME} krisnavolgy.hu RewriteRule ^(.*)naplo(.*)$ index.php?kategoria=111 [L] #Minden nemletezo oldal webcimet iranyitsuk at az index.php-re #ennek a végén kell lennie, mert máskülönben #a rövidítendő webcímeket is kiszűri #ha nincs favicon RewriteCond %{REQUEST_FILENAME} !favicon.ico [NC] #ha nemlétező a file RewriteCond %{REQUEST_FILENAME} !-f #ha nemlétező a könyvtár RewriteCond %{REQUEST_FILENAME} !-d #akkor legyen átirányítás RewriteRule ^(.*)$ index.php?hack=$1 [QSA] </IfModule>

URL átírások

Egyszerűsített URL-ek

Leírás:
Néhány webszerveren több mint egy URL tartozik egy forráshoz. Ezek általában egyszerűsített URL-ek (melyek könnyen megjegyezhetőek), vagy gyorslinkek, stb. Függetlenül attól, hogy a user melyik URL-t írta be végül az egyszerűsítettet kell látnia.
Megoldás:
Egy külső HTTP átirányítást fogunk alkalmazni a nem egyszerűsített URL-ek esetében, hogy a böngészők Hely (Location) mezőjében az egyszerűsítettek jelenjenek meg. Példánkban a /~user-t fogjuk az egyszerűsített /u/user-re fogjuk átírni és hozzáadunk egy záró perjelet.

    RewriteRule   ^/~([^/]+)/?(.*)    /u/$1/$2  [R]
    RewriteRule   ^/([uge])/([^/]+)$  /$1/$2/   [R]
		

Egyszerűsített hostnevek

Leírás:
Ennek a szabálynak az a célja, hogy ráerőszakoljuk a userra, hogy egy bizonyos hostnevet használjon más hostnevek helyett amelyeket ugyanehhez a weblaphoz használhatna. Például azt akarjuk, hogy a www.kivagyok.hu hostnevet akarjuk a userekkel használtatni a sima kivagyok.hu helyett.
Megoldás:
Ha a site nem a 80-as porton fut:

    RewriteCond %{HTTP_HOST}   !^www.kivagyok.hu [NC]
    RewriteCond %{HTTP_HOST}   !^$
    RewriteCond %{SERVER_PORT} !^80$
    RewriteRule ^/(.*)         http://www.kivagyok.hu:
         %{SERVER_PORT}/$1 [L,R]
		

Ha a site a 80-as porton fut:

    RewriteCond %{HTTP_HOST} !^www.kivagyok.hu [NC]
    RewriteCond %{HTTP_HOST} !^$
    RewriteRule ^/(.*)       http://www.kivagyok.hu/$1 [L,R]
		

Virtuális hostok

Leírás:
Ha szeretnénk egy www.felhasznalonev.host.hu nevet egy felhasználó weboldalaként virtulahost nélkül, akkor…
Megoldás:
HTTP/1.0 requestekhez nincs megoldás, de HTTP/1.1 requesteknél ami tartalmaz egy Host: HTTP header, akkor használhatjuk a következő szabályokat ahhoz, hogy átírjuk a http://www.felhasznalonev.host.hu/balamber-t /home/balamber/barmi-ra:

    RewriteCond %{HTTP_HOST}             ^www.[^.]+.host.hu$
    RewriteRule ^(.+)                    %{HTTP_HOST}$1 [C]
    RewriteRule ^www.([^.]+).host.hu(.*) /home/$1$2
		

Időpontfüggő átirányítás

Leírás:
Például egy időpont függő megjelenéshez általában valami scriptet hazsnálunk (például PHP-t), de hogyan tudjuk ezt a mod_rewrite-on keresztül?
Megoldás:
Van egy rakat változó, a TIME_xxx. Ezeket a lexikális összehasonlítással, vagyis a > < és = jelekkel tudjuk vizsgálni.
    RewriteCond   %{TIME_HOUR}%{TIME_MIN} >0700
    RewriteCond   %{TIME_HOUR}%{TIME_MIN} <1900
    RewriteRule   ^foo.html$             nappal.html
    RewriteRule   ^foo.html$             ejszaka.html
		

Ezzel a szabállyal ezt érjük el, hogy reggel 7 és este 7 között a nappal.html fog megjelenni, a többi időben pedig az ejszaka.htm. Ha ezeknek eltérő a tartalma, vagy a designja, akkor az elég izgalmas, nem?

Robot-elérés korlátozás

Leírás:
Hogyan tudunk egy zavaró robotot kitiltani a webszerverünk egy bizonyos területéről? A /robots.txt nem mindig elég ahhoz, hogy egy erőszakos robotot kitiltsunk.
Megoldás:
A lenti szabály letiltja a /~quux/foo/arc/ könyvtár elérését a robot részére. Ügyelnünk kell arra, hogy csak a robotot tiltsuk ki és a felhasználók hozzáférhessenek az oldalhoz. Ehhez megnézzük, hogy a HTTP_USER_AGENT változóban a robot neve van-e, és azt, hogy arról az IP címről jön-e ahonnan a robot szokott. Ha igen akkor küldünk neki egy “Felejts már el!” [F] üzenetet.

    RewriteCond %{HTTP_USER_AGENT}   ^aCsunyaRobotNeve.*
    RewriteCond %{REMOTE_ADDR}       ^123.45.67.[8-9]$
    RewriteRule ^/~quux/foo/arc/.+   -   [F]
		

Források:

226 thoughts on “URL átírások, Apache mod-rewrite

  1. Szia!

    Lenne egy kérdésem, már sok variációt kipróbáltam, de a megoldás nem akar összejönni.

    A lényeg van egy -htaccess file-om ami, működik mindaddig, amíg az első RewriteRule hajtódik végre, de mihelyst olyan oldalra megyek, amely a 2. rule-ra vonatkozik, akkor a css-t nem tölti be. Mi lehet a gond? Köszi a választ előre is.

    A .htaccess file-om:

    php_value register_globals Off
    Options -Indexes
    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([a-zA-Z]+)$ index.php?act=$1 [QSA,L]
    RewriteRule ^(.*)hirek/([^/]+)(/*)$ index.php?act=news&id=$2 [QSA,L]

  2. @Csaba a második szabályod más alkönyvtárra mutat. Innentől kezdve több probléma is lehet attól függően, hogy hogyan hívod meg a css file-t, illetve, hogy a domain gyökérben ül-e az alkalmazás. Olvasgasd el újra a RewriteBase részt, illetve a hozzászólások között is találsz ilyesmiket.

  3. Szia!
    Nagyon jó a cikk, viszont nem találtam meg benne a problémámra a választ. Azt akarom megoldani, hogy itt ez a példa link:
    http://dominem.hu/joomla_cm/kapcsolatok/
    A joomla_cm könyvtárba van telepítve a Joomla. De én azt akarom, hogy a böngészőben csak ennyi jelenjen meg:
    http://dominem.hu/kapcsolatok/

    A webszerver gyökérkönyvtárában már van egy htaccess ami a http://domainem.hu átirányítja a http://domainem.hu/joomla_cm/-re. Ez így jó is, de hogyan tudnám kivágni a linkből a joomla_cm-et, hogy ezt mások ne lássák?

    a Joomla alap htaccess-ben ezek vannak:
    RewriteEngine On
    # RewriteBase /
    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]

    Hogyan egészítsem ezt ki? Mert eddig sehogy sem lett jó.

    Előreis köszi!

    • @Alex a webserrver gyökerében lévő htaccessnek nem átirányítani kellene, hanem átirnia valahogy így:
      RewriteRule (.*) joomla_cm/$1 [L]

      Mondjuk ez minden hivatkozást átirányít az alkönyvtárra ami nem tudok, hogy a te esetedben megfelelő-e. De a többit szerintem a cikk alapján már összehozod.

  4. Köszönöm a válaszod, de a te megoldásod csak a Főoldalon működött jól. Aztán rájöttem, hogy túlbonyolítottam a dolgokat, és már meg van a megoldás a problémámra! 🙂

  5. Sziasztok!
    Sikerült beüzemelni ezt az átírásos témát a weboldalamon de azt szeretném hogy amikor beírja valaki az url-t pld:. http://www.oldalam.com/hu/2 akkor az maradjon is úgy tehát ne írja át.
    Remélem nem kérdeztem lehetetlent.
    Köszönöm a válaszokat előre is:)

    • @Pityu erre a kérdésre legalább 2 féle megoldás van a cikkben. Negáld valamelyik feltételedet, vagy erre az url-re ne csinálj semmit egy L flag-gel.

    • @Pityu igen, erről szól az egész cikk 🙂 Az R flag való a tényleges átirányításra, ha ezt nem használod akkor az url nem változik meg a böngészőben, csak az apache fogja úgy értelmezni mintha át lenne írva.
      Olvasd át még egyszer és kísérletezz.

  6. @Pityu nem szabadna átíródnia, legalábbis ettől nem. Tedd mögé a [L] flag-et.
    De szerintem valami más van ott ami átírja. Próbálj meg betenni valami szemetet a .htaccess-be illetve meghívni olyan paraméterekkel amik biztosan hibásak és figyeld, hogy milyen hibákat kap. Ha nem megy akkor nyiss egy topicot a weblabor.hu fórumon, itt nem fogjuk tudni kibogozni.

  7. Szia!

    A problémám a következő. Átlinkelek egy aloldalra, mod_rewrite működik szépen, de amikor onnan jönnék vissza két paraméterrel akkor valamiért belekavarodik a visszafejtésbe. Visszafelé az index.php-t hívnám meg két praméterrel. De azt látom hogy duplikálja a paramétereket. Elgondolásom szerint ezzel a sorral RewriteCond %{REQUEST_FILENAME} index.php [NC] gondoltam feltételt állítani azt ezt követő rule-nak.

    a htaccess file tartalma:
    Options +FollowSymLinks
    RewriteEngine on
    RewriteOptions MaxRedirects=10
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule \.css$ /mobile.css [NC]

    RewriteCond %{REQUEST_FILENAME} index.php [NC]
    RewriteRule ^([0-9]+)/([0-9]+).html$ index.php?selectid=$1&page=$2 [L]

    RewriteRule ^([0-9]+)/([0-9]+)/([0-9]+)/([0-9a-zA-Z_-]*).html$ reszletek.php?utazasid=$1&select=$2&page=$3&szallas=$4 [L,QSA]
    RewriteRule ^([0-9]+)/([0-9]+)/([0-9a-zA-Z_-]*).html$ reszletek.php?utazasid=$1&page=$2&szallas=$3 [L,QSA]
    ErrorDocument 404 /404.php

  8. Szia!

    tudnál segíteni Apache web szerveren az alábbi átirányítás vagy átírás kivitelezésében? Szeretek hasonló dolgokat kitalálni, de most egy dolog miatt nem akarom magam ezzel kínozni.

    “http://akarmi.hu” vagy “http://akarmi.hu/” szeretném átírni/átirányítani

    ide:
    akarmi.hu/itt_akarmi_lehessen
    pl.: akarmi.hu/program/login?uid=anonymous&upwd=anonymous

    Előre is köszi,
    üdv.: Cs. Tamás

  9. Előbbi kérdésemre meg is találtam a választ, így ne törjétek magatokat ezzel!

    Usually the DocumentRoot of the webserver directly relates to the URL “/”. But often this data is not really of top-level priority. For example, you may wish for visitors, on first entering a site, to go to a particular subdirectory /about/. This may be accomplished using the following ruleset:

    Solution:
    We redirect the URL / to /about/:

    RewriteEngine on
    RewriteRule ^/$ /about/ [R]
    Note that this can also be handled using the RedirectMatch directive:

    RedirectMatch ^/$ http://example.com/e/www/

  10. Szia(sztok)!

    Adott az alábbi .htaccess…

    Options +FollowSymLinks
    DirectoryIndex index.php
    ErrorDocument 404 /index.php
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?page=$1 [QSA]

    Miért nem működik a rövid URL!?

    http://oldalam.hu/?page=xxx

    NEM TUDOM ELTÜNTETNI EZT:(
    (A MENÜK IS CSÚNYÁK)

    http://oldalam.hu/xxx

    EZT SZERETNÉM LÁTNI HA KATTINTOK…
    Lécci segítsetek mert kezdem unni!!

    Üdv.

    • @Roland28 Első körben azt javaslom, hogy olvasd el még egyszer figyelmesen a cikket, benne van a válasz. Valami ilyesmi lesz: RewriteRule (.*) index.php?page=$1 de jobb ha tudod, hogy mit csinálsz mint ha találgatsz.

  11. Szia!

    Végigolvastam a cikked, de sajnos nem tudom megvalósítani a keresőbarát url-t 🙁

    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^cegunkrol(.*)$ index.php?page=menu&id=$1 [L]

    erre kérnék egy kis segítséget, előre is köszönöm

    • @Feru És mi nem működik?A szabályod azt mondja, hogy ha az url-ben a domain után annyi van, hogy cegunkrol es nincs se előtte se utánna semmi – beleértve a / jelet akkor irányítsa át

  12. Hello!

    Segítségeteket szeretném kérni.
    Adott egy url: valami.com/k1/v1/v2/v3/?nezet=regi
    Azt szeretném megoldani, hogy ha a “nezet” szó szerepel az url-ben, akkor irányítsa át, mondjuk hiba.php-re. A k1 látszólagos könyvtár mindig ugyanaz, viszont a v1, v2, v3 helyén mindig más változó (látszólagos könyvtár) áll.
    (.*)nezet(.*) sajnos nem elég, mert előtte vannak a könyvtárak.
    Előre is köszi a segítséget!

  13. Szia!

    Elolvastam a cikkedet, nagyon hasznos, és jó látni, hogy van aki ilyen sok embernek segítsen (bár lehetne lapozós a kommentrendszer, mert jobbódali’ csík már kiakadóban van 😛 )

    Na de sorbaállok:
    Megoldható mod-rewrite-tal, hogy az alábbiak szerint irányítsak át?

    x.hu/{OLDAL}.php?n={SZÁM}&p={SZÁM2}&param3=szilva……
    x.hu/{OLDAL}/{SZÁM}/p-{SZÁM2}/param3-szilva
    ahol semmi sem kötelező -t kivéve.
    tehát úgy is működjön, hogy:
    x.hu/{OLDAL}.php?p={SZÁM}
    x.hu/{OLDAL}/p-{SZÁM}

    vagy akár úgy is, hogy:
    x.hu/{OLDAL}.php?n={SZÁM}
    x.hu/{OLDAL}/{SZÁM}

    Valamint HWSW-n láttam egy jó találmányt:
    http://www.hwsw.hu/hirek/45837/hitachi-gst-hdd-deskstar-7k3000-5k3000-merevlemez.html
    ahol a link a fontos.. ha átfirkálod a hír ID-jét, akkor mögötte átírja a szöveget (hitachi-gst….). Ezt is mod-rewrite-tal csinálták? Ha igen, hogyan?

    Természetesen nem kérlek, hogy csináld meg a fentieket helyettem, csak valami irányadó pontokat adj, mivel preg, ereg stb. cuccokat sosem láttam át, illetve maga a helyzet is bonyolultabb.

    Válaszodat előre is köszönöm!!
    Bocsi a duplázásért, “kacsacsőröket” ki escapelte.

    • @pLa darabokra bontod a mintádat úgy, hogy mindegyiket feltételesre veszed, lezárójelezed és utána úgy hivatkozol rá az átirányításnál. Jól le kell tesztelni a regex mintát hozzá, de megoldható természetesen. Az már más kérdés, hogy én inkább úgy indulnék el, hogy szolgáljon ki mindent az index.php, ami szépen ízekre szedi az url-t és az alapján szolgálja ki az oldalt.

      A hwsw átírka Firefox alatt nem megy. A mod_rewrite a szerver oldalon ül. Ha az oldal újratöltése nélkül történik valami akkor az JavaScript, vagy valami más kliens oldali cucc.

  14. @rrd Ilyen ízekre bontásra tudsz példát mutatni? Nem teljesen látom át a mod_rewrite-ot. Az oldalam mostani verziója az általad említett index.php-s cuccal működik (url rewrite nélkül), viszont adódtak problémáim belőle, így folyamodok ehhez a módszerhez (minden külön fileban van).

    HWSW-s akármi megy firefox alatt, ha 404-et kapsz, akkor próbáld más számmal. én az utolsó számot írtam át 0-ra, és működik. Azért kérdeztem, mert hallottam valamiről, hogy lehet ilyet rewritetal, de nem tudom biztosra, és ha mégis lenne se tudom elképzelni hogy hogyan lenne képes működni.

    pLa

    • @pLa RewriteRule akarmi.hu/(.*)/(.*)/(.*) index.php?oid=$1&keres=$2&info=$3 [QSA,L] Minden egyes zárójelezett részre hivatkozhatsz az átirányításban $1, $2, stb-vel. Neked a zárójelen belüli regexeket kell létre hoznod az igényeid szerint. A te esetedben annyival nehezebb a dolog, hogy ha jól értem bármilyen sorrendben jöhetnek a paraméterek ami eléggé megbonyolítja a helyzetet. De ez már regex kérdés amiről külön könyvek születnek 🙂 Szerintem neked valami olyan lenne a legjobb mint CakePHP keretrendszernél a named parameter-ek. De 100%-ig meg vagyok győződve, hogy rugalmasabb és kényelmesebb lesz php-ból lekezelned mint a regexel varázsolnod. Ha nem megy akkor a http://weblabor.hu fórumon tedd fel a kérdésedet, ott jobban van lehetőség kiforgatni a sarkaiból mint itt a hozzászólásoknál.

  15. @rrd Igen, valóban valahogy így akarom (annyi különbséggel, hogy nem kötelezőek a tagok az elsőt kivéve), akkor továbbutazom weblaborra.

    pLa

  16. Szia!

    A kérdésem:
    Hogy kell az alábbi részt kiegészíteni, hogy az “irasok/images” elérésiutat tartalmazó képek megjelenjenek az oldalon?

    RewriteCond %{REQUEST_URI} ^/irasok(/.*)$
    RewriteRule ^(.*)$ index.php?q=$1 [QSA]

  17. Aha, Kösz! Így már oké:

    RewriteCond %{REQUEST_URI} ^/irasok(/.*)$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?q=$1 [QSA]

    Nem tudom mért, de korábban mindenáron az alábbi páldádat akartam alkalmazni:
    RewriteRule ^(.*)receptek/([^/]+)(/*)$ index.php?modul=recept
    &recept=$2 [L]

  18. Szia!
    Szeretnék segítséget kérni az alábbiakban:
    Van egy fizetős tárhelyem az atw-nél, melyre feltettem a weblapom tartalmát, közte egy .htaccess fájlt, melynek tartalma:
    ———————————————————
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !/(.*)_([0-9]+).*\.html$
    RewriteRule ^(.*)\.html$ $1.php [L]

    RewriteCond %{REQUEST_URI} /([a-zA-Z_]+)_([0-9]+).*\.html$
    RewriteRule (.*) %1.php?pgno=%2 [L]

    ———————————————————

    amíg nem volt kész a domain addig az oldal tökéletesen működött, local webszerveren is tökéletesen működik (még most is), de elkészült a .hu-s domain és azóta az oldalon bármely hivatkozásra kattintva az alábbi hibaüzenetet kapom:
    ————————————-
    Not Found
    The requested URL /m/o/domainnéhunélkül/fileneve.php was not found on this server.
    ————————————–
    A tárhelyen nincs ilyen könyvtárszerkezet és ilyen hivatkozás sincs egyik fáljban sem.
    A tárhely tartalma a gyökérbe van felmásolva,de akárhova másolom akkor is hibaüzenetet dob, csak a filenév elé bekerül a könyvtár neve is.
    Előre is köszi!

  19. Szia!
    Először is kösz a szájbarágós cikket!
    Szeretném megcsinálni az oldalamon, hogy a teszt.hu/valami az a teszt.hu/valami.php-re irányítódjon át, azaz tegye hozzá a .php-t.
    Ezt használom:
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.+)$ $1.php [L,QSA]

    Ez működik is egy kivétellel. Van egy downloads mappám és egy downloads.php fájlom, s mindig a mappa listázódik ki, pedig én a teszt.hu/downloads-ra a php szktiptet szeretném futtatni.
    Előre is kösz a segítséget!

    • @Ati Igen, a szabály azt mondja, hogy ha nincs downloads mappád akkor szolgálja ki helyette a downloads.php-t. Ha ugyanaz a név akkor honnan tudja a szerver, hogy épp a fájlt vagy a könyvtárt akarod? Több mindent is csinálhatsz.
      1. Vagy a file-t vagy a könyvtárat átnevezed.
      2. Ha sosem akarod listázni a könyvtárat akkor hozzáadsz még egy RewriteCond-ot ami azt mondja, hogy a downloads könyvtár nem kell neked.
      3. A lekéréseidhez hozzáadsz egy url paramétert ami alapján a htaccess szabály el tudja dönteni, hogy a könyvtár kell neked vagy a file.

  20. Üdv!

    Kicsi segítségre lenne szükségem.
    Azt szeretném elérni, hogy az URL így nézzen ki: http://www.bolt.hu/gyarto/tipus

    valós link: index.php?page=categories&cat=gyarto&product_id=tipus

    A szabály ez rá:
    RewriteRule ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)$ ./index.php?page=categories&cat=$1&product_id=$2

    Annyi a baj vele, hogy az összes hivatkozás elé berakja a “gyarto”-t így sem a stíluslapok, sem a linkek nem működnek.

    Hogyan tudnék ezen segíteni?

    Köszönettel

    Viking

  21. Nekem minden megy szépen, az url-ek nagyon szépek, működnek. egy probléma van: ez a rule a rooton elhelyezett htaccessben ( RewriteRule ^([^/]+)(/*)$ /php/main.php?tart=aloldal&id=$1 [L] ) gyakorlatilag átugorja az index.html oldalt, és egyből a fejlesztés idejére htpassw-el védett php mappába továbbítja a látogatót, ahol a jelszó kérést kapja, nem pedig az index thmlben lévő “várjá, fejlesztünk” üzenetet. hogy lehetne ezt kiküszöbölni?
    köszi. 🙂
    rrroka

  22. @rdd: igen, tudom, hogy van olyan szabály, hogy ha nem fájl stb, próbáltam. 🙂 de a rewrite miatt nem is érinti az index.html-t, mert egyből urlt generál, ami továbbdob, vagyis hiába adom hozzá kivételnek.

  23. Kedves rrd!

    Hihetetlen számomra, hogy ennyi hasznos infót közölsz!

    Weboldalam url-ját szeretném átalakítani, és tudom, a megoldás ezen az oldalon található, de még is azt gondolom, nincs egyszerű dolgom.. 🙂

    DE AZÉRT KÖSZI! MINDENKI NEVÉBEN!

  24. @rdd:
    RewriteRule ^([^/]+)(/*)$ /php/main.php?tart=$1 [L]
    vagyis bármi van a domain.hu/ után, menjen egyből a php mappába, akkor is, ha semmi sincs, ott ezt lekezelem.

    • @rroka Igen, pontosan ez ELÉ a RewriteRule elé kell ez:
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d

      Vagyis ha a meghívott url nem egy létező file és nem is egy létező könyvtár akkor alkalmazd a rule-t, ha meg mégis az akkor meg szolgáld ki azt.

  25. Hello, zseniális cikk, egy csomó dolog meghomályosodott.

    2 nyelvű oldalt szeretnék a megfelelő domaineken elérhetővé tenni. Azt szeretném, hogy a domain -eknek megfelelő index-fájlt töltse be.

    http://www.domain.hu/index.html
    http://www.domain.at/index_de.html

    Eddig jutottam:

    RewriteCond %{HTTP_HOST} ^akarmi\.at [NC]
    RewriteRule (.*) http://www.akarmi.at/index_de.html [R=301,L,NC]

    Ez szuperül átirányítja, viszont csak akkor, ha www-nélküli domain-t írok. www-set sehogy sem tudom átirányítani, vagy csak úgy, hogy minden hivatkozást (pl. http://www.domain.at/valami) a index_de.html -re irányít.

    Hogyan kellene megközelíteni a problémát?
    Köszönöm!

  26. @rrd Áhhá, azért érdemes elhagyni a ^ – jelet, mert akkor nem csak a hivatkozás elejétől fogja vizsgálni, hanem a www-sre is érvényes lesz, ha jól értem.

    Így sajnos loop lesz a móka vége:

    RewriteCond %{HTTP_HOST} domain\.at [NC]
    RewriteRule (.*) http://www.domain.at/index_de.html [R=301,L,NC]

    Nem lehet, hogy azért, mert kéne egy olyan RewriteCond, hogy ha már a hivatkozás index_de.html, akkor ne Írja át?

    Ezen kívül úgy szeretném megoldani, hogy ha már nem a splash screen -en van, hanem elnavigált (domain.at/valami.html), akkor ne írja felül.
    Köszönöm!

    • @nagyi A problémád az, hogy az R flag az egy tényleges átirányítást csinál, ami miatt újra és újra végrehajtódik a rewrite. Ha jól értem a doman.hu és a domain.at valójában a webszervereden ugyanaz a könyvtár. Ha van valami szerver oldali feldolgozó programod pl php akkor onnan érdemes vizsgálni, hogy mi az url és arra mit adjon ki. Ha csak statikus html fájlaid vannak, akkor javascripttel be kell állítanod egy cookie-t ami tartalmazza a nyelvi beállítást és azt kiolvasgatni a .htaccessben . Persze ebben az esetben a fő kérdés, hogy ha már sima html fileok vannak akkor mi értelme van együtt tárolni a német és a magyar fileokat.

  27. @rrd Igen, egy könyvtár van, egy CMS (Joomla!) van benne, de muszáj volt egy beléptetős .html oldalt (illetve nyelvenként többet csinálni), ezért szerettem volna erőltetni ezt a tényleges .htaccess átirányításos megoldást, hogy az .at végződéssel már a megfelelő index_de.html töltődjön be a usernek.

    Köszönöm az időt, egyelőre tanácsod alapján megpróbálom máshonnan megközelíteni a megoldást (valószínű nyitóoldalakat kukázom és integrálom a CMS -be.). A html -es htaccess csábítóan egyszerűnek tűnt, de ha nem, hát nem.

  28. Szia rrd!

    Adott egy adatbázis, és ilyen urleket eredményez:

    http://localhost/ingatlanok/ingatlan-kereses/index.php?megye=0&input1=&varos=0&arvalaszto=2&reszletes_kereses=&terulet_min=&terulet_max=&szoba_min=&szoba_max=&emelet_max=0&rendez1=0&rendez2=1&rendez3=10&kereses=+

    Az a gondom, hogy ezek variánsai is működnek, így:

    http://localhost/ingatlanok/ingatlan-kereses/index.php?megye=0&input1=&varos=0

    A variációk száma borzasztó sok, az összes leírása regexel lehetetlen.
    Van arra mód, hogy egyenként cseréljem ki az url egyes elemeit?

    megye=0 –> minden-megye/
    megye=7 –> fejer-megye/
    varos=0 –> minden-varos/
    varos=3 –> kerekitofulopos/

    A lényeg hogy független legyen a tényleges url hosszától, mert az igen változó lehet, és string-replaceként működjön.
    Lehet hogy favágós megoldás, de jobb ötletem nincs.
    Ilyesmire gondoltam

    RewriteRule (elotteakarmi) mire/ (utanaakarmi) mit [??QSA]

    • @krabat Lehet persze, csak ne tegyél az egyes szabályokra L flag-et, hogy tovább menjen szépen az összesen. Azonban egy ilyen összetett feladatnál én inkább a PHP-ra bíznám az URL feldolgozását. Az index.php elejére teszel egy kis részt ami ízekre szedi az url-t és beállítja a $_GET változóidat.

  29. Szeretnék egy ilyen átalakítást:
    http://www.video-oldal.hu/nev.php?cim=Egy-konkret-video-cime
    http://www.video-oldal.hu/Egy-konkret-video-cime

    Így próbáltam a leírásaitok alapján, de nem oké a dolog:
    RewriteRule ^(.*)$ nev.php?cim=$1 [QSA,L]

    Lehet azért mert ez a htaccess fájl eleje? :
    RewriteEngine on
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.html?q=$1 [QSA]

    Ez azért kell, hogy a régi html-es oldalakra való hivatkozás során (mert már mások beágyazták több helyen a saját oldalukra), a kezdőoldalra ugorjon.

  30. Miért törölted a hozzászólásomat? A video-oldal.hu nem egy létező weblap, csak fiktív. Nagyon fontos lenne, hogy válaszoljatok a kérdésemre.
    Hogyan lehet ezeket az átirányításokat létrehozni:
    http://www.video-oldal.hu/kategoria.php
    http://www.video-oldal.hu/kategoria

    és

    http://www.video-oldal.hu/nev.php?cim=Egy-konkret-video-cime
    http://www.video-oldal.hu/Egy-konkret-video-cime

    Ezt írtam a htaccess-be, hogy más oldalakról a régi html-es linkekre kattintva betöltődjön a kezdőoldal:
    RewriteEngine on
    RewriteBase /

    RewriteRule ^kategoria$ kategoria.php

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.html?q=$1 [QSA]

    • @Toldi Gábor Nem írtad le pontosan, hogy mi a problémád. Valami ilyesmi lesz a megoldás:


      RewriteEngine on
      RewriteBase /
      RewriteRule ^kategoria$ kategoria.php
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)html$ index.html [L]
      RewriteRule ^(.*)$ nev.php?cim=$1 [L]

  31. Szia.

    Szeretném megtudni hogy azt hogyan kell :
    ujnev.com domaint átirányítani a reginev.com/ujnev ra, /eddig ooké/anélkül, hogy látszana a reginev.com/ujnev mappa
    tehát az volna a jó ha az ujnev.com látszana csak és másik domain nem.
    Köszönöm

  32. Kedves rrd!

    Ami példát adtál a #ha nincs favicon után valami miatt nem működik azon a szerveren ahol én hozok létre oldalakat.

    it a telje .htaccess file:
    RewriteEngine on
    RewriteOptions MaxRedirects=10

    #Ebben az alkonyvtarban vagyunk, ezt figyelembe kell venni
    RewriteBase /admin

    RewriteRule ^names/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ names.php?page=$1&column=$2 [NC,L]

    #ha nincs favicon
    RewriteCond %{REQUEST_FILENAME} !favicon.ico [NC]
    #ha nemlétező a file
    RewriteCond %{REQUEST_FILENAME} !-f
    #ha nemlétező a könyvtár
    RewriteCond %{REQUEST_FILENAME} !-d
    #akkor legyen átirányítás
    RewriteRule ^(.*)$ index.php?hack=$1 [QSA]

    oldal.hu/admin/names/1/name/ ugyan megnyílik de nincs formázva, mer nem találja meg a .css file-okat.

    Ami érdekes, hogy ha frissítek, akkor az oldal.hu/admin/names/1/name/index.php-t próbálja megnyitni ami ugye nem létezik. A css file-ok, amugy az oldal.hu/css/ könyvtárban vannak.

  33. szia
    tobbfele atiranyitast szeretnek de nem boldogulok, segitenel? köszi.

    ilyen url-eket varok:
    -domain.hu VAGY domain.hu/
    -domain.hu/page VAGY domain.hu/page/
    -domain.hu/kat/11 VAGY domain.hu/kat/11/
    nem talalom azt a megoldast ami mind3at (6ot) jol kezeli.

    RewriteCond %{REQUEST_FILENAME} !favicon.ico [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)kat/([^/]+)(/*)$ start.php?seturl=$2 [L]
    #domain.hu/kat/11 OK, domain.hu/kat/11/ OK

    RewriteCond %{REQUEST_FILENAME} !favicon.ico [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)(/*)$ start.php?seturl=$1 [L]
    #domain.hu/page OK, domain.hu/page/ NEMOK

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöljük.