“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.
- 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 - 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):
- http://webmania.cc/rovat/17
- 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:
- http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
- http://httpd.apache.org/docs/1.3/misc/rewriteguide.html
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]
@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.
Köszönöm, megoldottam.
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.
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! 🙂
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.
Üdv!
Lehet hogy nem jól fogalmaztam.
tehát azt akarom, hogyha beírom azt hogy
http://www.oldalam.hu/2/1
akkor fusson le az oldalam.hu/index.php?m=2&s=1
de a böngészőben az
http://www.oldalam.hu/2/1
legyen látható.
Ha ez is benne van a leírásban akkor nagyon vak vagyok, mert nem találom:S
@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.
ÜDv : )
Márpedig én nem használom az [R] flaget.
itt a htaccessem:
RewriteEngine on
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)/(.*)/?$ http://www.brillngjd.com/index.php?lang=$1&m=$2
@Pityu Nagyjából valami ilyesminek kell lennie. Mi a gond vele?
ÜDv!
Az a gond vele, hogy a böngészőben látom hogy átvált a cím.
Ezt szeretném valahogy kiküszöbölni:/
@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.
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
@Imre szerintem nem kell a QSA. Ha ez nem segít akkor a weblabor.hu fórumán folytassuk 🙂
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
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/
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 Megy egyáltalán a rewrite modul? Először azt kellene ellenőrizni.
Persze hogy megy! “félig” jól is…
beírom http://oldalam.hu/valami
elindul http://oldalam.hu/?page=valami
DE NEM “CSAK” EZT AKAROM:(
Ha az oldalon bármilyen menüre kattintok:)
ÍGY JELENJEN MEG!!
http://oldalam.hu/valami
@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.
Köszi! Átolvastam többször…
De nem vezet megoldásra:(
Ugyanez van nekem is!!
(a leírás szerint)
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
rrd már csak annyi a bajom, hogy nem tudom milyen kódot kellene a php-ba beletennem 🙁
@Feru a PHP-ba? Oda semmit.
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!
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}¶m3=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.
@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.
@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
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]
@Trianta olvasd el a cikket és rájössz. Feltételes átirányításra van szükséged van fentebb több példa is. Kell még egy rewritecond -f-fel.
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]
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!
@fish Ez inkább valami apache beállítás probléma lesz. Fordulj az üzemeltetőhöz.
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.
Ü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
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
@Viking @rroka ot a válasz a cikkben. Van egy szabály ami azt mondja, hogy ha a meghívott url egy nem létező fájl vagy nem létező könyvtár akkor…
@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.
@rroka a cond a rule elé kell. Nem ugorhatja át. Hogy néz ki a teljes .htaccessed?
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!
Üdv!
Éppen írni akartam amikor sikerült megoldani. Kösz a cikket! 😀
@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.
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!
@nagyi talán ha a ^akarmi-nál lehagynád a ^ jelet…
@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.
@rdd: kipróbálom, köszi!
@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.
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.
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.
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]
A másik átirányításra (a fontosabbra)
http://www.video-oldal.hu/nev.php?cim=Egy-konkret-video-cime
http://www.video-oldal.hu/Egy-konkret-video-cime
, írtam egy ilyet:
RewriteEngine on
RewriteBase /
RewriteRule ^([a-zA-Z0-9-]+)$ /nev.php?cim=$1
De 404-es hibát generál. 🙁
Miért?
@Toldi Gábor Látatlanban ezt nehéz megmondani. Nézz bele az apache rewrite log-ba, hogy milyen url-t próbál igazából hívni.
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
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.
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
Köszi a cikket, nagyon sokat segítettél 🙂