URL átírások, Apache mod-rewrite
apache, hogyan, mod-rewrite, url
“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.
RewriteEngine on RewriteOptions MaxRedirects=10
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.
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]
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.htmlEzzel 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
Ez a bejegyzés rrd billentyűzetéből potyogott ki 2006 augusztus 21. napján 09:40:01-kor. Eddig 19,510 olvasást ért meg. A visszajelzéseket nyomonkövetheted ezzel az RSS feed-el. Véleményt nyilváníthatsz, vagy trackbackolhatsz a saját oldaladon.
JólMegMondjad!
187 vélemény
-
morfio
2007 június 3. 11:14:43Szia!
Én ezt szeretném vhogy megváétoztatni:
http://oldal.hu/index.php?oldal=valamierre:
Van megoldás?
-
rrd
2007 június 3. 11:29:38morfio: Van bizony, és ha elolvasnád a cikket akkor rá is jönnél, mert minimum 3 helyen szerepel benne.
RewriteRule ^(.*)$ index.php?oldal=$1 [QSA,L]
-
morfio
2007 június 3. 11:35:39Ez így jó, ha az alkönyvtár /proba:
RewriteEngine on
RewriteOptions MaxRedirects=10#Ebben az alkonyvtarban vagyunk, ezt figyelembe kell venni
RewriteBase /probaRewriteRule ^(.*)$ index.php?oldal=$1 [QSA,L]
-
rrd
2007 június 4. 06:27:33morfio: Kérdezed vagy mondod?
Elvileg jó, de ki kell próbálni, mert adódhatnak a base miatt érdekességek. -
morfio
2007 június 4. 09:46:06kérdezem… hehe, megy így, legalábbis a linkelés, de a css-t nem jeleníti meg, s ha beírom a böngészőbe az url-t, akkor nem jeleníthető meg… mi a gond?
-
rrd
2007 június 5. 01:11:28morfio: hát így látatlanban nehéz megmondani. Ha adsz egy linket amit látok, akkor ránézek. De tippem az van
. A fenti átirányítás abszolút, azaz mindent átirányít. Vagyis ha az oldalad megpróbálja lehívni a http://oldal.hu/style.css filet, akkor azon is végrehajtódik az átirányítás, és ezért a http://oldal.hu/index.php?oldal=style.css -t próbálja megjeleníteni. Ugyanez lesz a helyzet a képekkel, javascript fileokkal, és minden egyébbel amit próbálsz vele megjeleníteni. Ennek kezelését megtalálod fentebb a “ha nincs favicon” kezdetű példában. -
morfio
2007 június 9. 07:52:47SIKERÜLT!!!!!!!
elolvastam a cikket, és egyből tudtam, s műkösik!!!! jee
-
arti
2007 június 19. 22:00:48Hali,
remelem tudtok nekem segiteni

az en atirando linkem #-t tartalmaz… azt hogyan irhatnam at rewriterule-al?
pl: http://www.akarmi.hu/olvasdel#harmadikfejezetelore is koszi
-
rrd
2007 június 20. 09:04:31arti: Mi nem ment? Mit próbáltál? A mintába beteszed a #-t és kész.
-
arti
2007 június 20. 09:49:20irnam a parancsot pl
rewriterule /olvasdel/harmadik /olvasdel#harmadikfejezet
de a #-t specialis karakternek veszi, az utana levo dolgokat nem veszi figyelembe…
csak a http://www.akarmi.hu/olvasdel/ -re ugrik -
rrd
2007 június 20. 15:33:26arti: Igen, tényleg a mod_rewirte escapeli a # jelet %23-ra. Ezért a RewriteRule-nál a [NE] flaget kell beállítani az escape elkerülése érdekében. Én még nem csináltam ilyet, próbáld ki, de lehet, hogy kell vele kicsit játszogatni.
-
Csaba
2007 július 22. 11:24:26Szia!
Klassz cikk, egy kis szépséghibával meg is oldottam a dolgokat.
http://www.szivkuldi.hu/kepeslap/gallerybrowser.php?cat_id=11url a
http://www.szivkuldi.hu/kepeslap/technika/
url-t meghívva is szépen betölt, de a css fájlokkal valami gond lehet.
Mit ronthattam el, ha a .htaccess fájlom a következőket tartalmazza:
RewriteEngine on
RewriteOptions MaxRedirects=10
RewriteBase /kepeslap
RewriteCond %{SERVER_NAME} szivkuldi.hu
RewriteRule ^(.*)technika(.*)$ gallerybrowser.php?cat_id=11 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !favicon.ico [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?hack=$1 [QSA]Köszi!
-
rrd
2007 július 23. 06:55:37Csaba: A definíciód azt mondja, hogy minden url-t amiben szerepel a technika szó az legyen átirányítva a gallerybrowser.php?cat_id=11 url-re. Szóval a http://szivkuldi.hu/kepeslap/technika/stiluslap.css is át lesz irányítva rá.
Vagy átírod az átirányítást, vagy gondoskodsz róla, hogy a php fileod kiszolgálja a css-t, vagy a css fileodat egy könyvtárral feljebb rakod.
-
morfio
2007 augusztus 2. 02:50:58hello.
lenne egy kérdésem. van egy ilyen urlem:
http://www.valami.hu/index.php?page=introducing&title=introducing&option=quick-chocie
ezt, hogy tudom ilyenre csinálni:
http://www.valami.hu/introducing
köszi előre is. -
rrd
2007 augusztus 2. 21:38:19morfio: beugratós kérdésekre nem válaszolok
Mit próbáltál? Mi nem ment? Az elv ugyanaz mint amire írtad, hogy sikerült. -
Csaby
2007 augusztus 8. 13:43:02Szia!
Kérdésem a következő csak sejtem mi lehet a gond de a:
RewriteEngine on-ra 500 as hibat dob a localhostom a mi egy appserv konstukció 2.2 apache-al meg 5.2.1 php van benne mi lehet a gond? néztem a betöltödö modulokat a szerveren nem szerepel köztük a mod_rewrite de a fájl .so kiterjesztéssel meg van?!tud valaki ebben segíteni?
előre is köszönöm! -
Csaby
2007 augusztus 8. 19:07:25Sziasztok!
az elöbb feltett kérdésem megoldodott!
de van egy újabb mégpedig az hogy….hu/index.php?oldal=valami¶m1=1¶m2=2&…
ebből hogy lehet
….hu/valami/valami.html -
rrd
2007 augusztus 9. 09:25:31Csaby: Attól függ, hogy mit is szeretnél. A paraméterektől függő vagy független átirányítást. De minden le van írva általánosságban odafenn. Ha valami nem tiszta akkor meg konkrétan kérdezz
-
Csaby
2007 augusztus 10. 12:40:33Szia!
Konkrétan az lenne hogy van egy ilyen href:
<a href=”index.php?oid=oldal&keres=ezt&info=ez” rel=”nofollow”>néz</a>
és erre kattintva valami hasonló jelenjen meg a böngészőben:
..hu/oldal/ezt/info
viszont az a link dolgozza fel ami href-ben van
és ha
..hu/oldal/ezt/info vagy
..hu/index.php?oid=oldal&keres=ezt&info=ez
van beleírva a böngészöbe akkor is ugyan az hajtodjon végre (ez meg van)igen olvastam az egész oldalt sőt még több helyen is utána néztem de sehol nem találtam olyat hogy a href ilyen formában működne.
-
rrd
2007 augusztus 10. 14:24:58Csaby: Ha jól értem a perjelek mentén akarod szétdarabolni az url-t.
RewriteRule akarmi.hu/(.*)/(.*)/(.*) index.php?oid=$1&keres=$2&info=$3 [QSA,L]
Nem próbáltam ki, de valami ilyesmi
-
amnS
2007 augusztus 10. 16:20:54üdv
a cikk tetszik, habár így elsőre nem sikerült mindent felfogni, na de bennem van a hiba…
valamit mégis csak összetákoltam, és akadna egy problémám.
mégpedig:
az ékezetekkel lenne gondom, de csak firefoxban, mert ugye az átalakítja őket %xx formára, és így nem megy, kivéve az ő és ű működik (nem értem miért ezek), még akkor is, ha a többi ékezetes és egy ezek közül van benne.szóval részletesebben:
ez a rule-om:RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^(.*)$ index.php?x=$1 [QSA,L]ez ugye annyit csinál, hogy ha nem file vagy mappa, akkor ami a címben van átdobja egy x nevű get változóba, és onnan phpben azt csinálok vele, amit jól esik. pl.:
http://localhost/user – ez egy modulom, tökéletesen működik
http://localhost/none – no, ilyen modulom nincs, és szépen ki is írja, hogy nincs, szóval ezzel sincs gond
http://localhost/őű – nemlétező modul, de ez a kettő jól is működik
http://localhost/áéáé – ilyen modulom sincs, de ezzel nem azt írja ki, hogy nincs, hanem mappaként fogja fel, és ad egy “Forbidden” hibát.
http://localhost/éő – ha így írom, akkor működik, ha:
http://localhost/%C3ő vagy é%C5%91 – ekkor már nem, meg nem tudom ezt miért így kódolja, hogy %xx%xx, meg még egy van pár féle változat, de nem akarom terhelni az adatbázist…szóval a kérdésem: hogyan tudom ezt a hibát kiküszöbölni?
-
rrd
2007 augusztus 11. 07:43:10amnS: A magam részéről nem tudom, nem néztem soha ékezetes betűkre.
-
amnS
2007 augusztus 14. 21:01:05no sebaj. megoldottam phpben egy urldecode-dal, plusz a linkeket urlencode-dal íratom ki, és így minden tökéletesen működik…
üdv! -
hubbabubba
2007 szeptember 29. 18:26:24nagyon frankó leírás!
össze is tudtam kalapálni egy kódot ami a domain.hu/oldal/id-t átkonvertálja domain.hu/index.php?oldal=oldal&id=id-reviszont
css-sel gondjaim vannak..
RewriteCond %{REQUEST_FILENAME} !.css
vagy
RewriteCond %{REQUEST_FILENAME} !(.*)css(.*)
vagy
RewriteCond %{REQUEST_FILENAME} !(.*)style.cssezeket ha beteszem ez elé:
RewriteRule ^([a-zA-Z0-9]+)/?([0-9]*)/?$ index.php?oldal=$1&id=$2 [QSA,L]akkor a domain.hu/valami oldal (ami ugye domain.hu?oldal=valami) frankón bejön és a css is, szóval ezzel nincs gond.
viszont ha a domain.hu/valami/1-et nézem, akkor bejön a domain.hu?oldal=valami&id=1 de a css ebben az esetben nem!mi lehet a gond?
-
rrd
2007 szeptember 30. 14:21:22hubbabubba: Attól függ, hogy hogyan hívod a html-ből a css fileodat. Másrészről viszont a /?$ azt mondja, hogy a kifejezés végén legalább egy / jelnek kell lennie. A domain.hu/valami/1 végén meg nincsen.
-
hubbabubba
2007 október 3. 16:00:48rrd: kösz a választ!
(a ? nem 0-át vagy 1-et jelent?)
átírtam és most ilyen lett:
RewriteCond %{REQUEST_FILENAME} !(\.css|\.jpg)
RewriteRule .* index.php [L]a domain.hu/valami szépen bejön, css-el + jpg képpel együtt. egészen addig, amíg a “valami”ben nem szerepel egy / jel. ha van benne / akkor is betölti magát az oldalt (index.php-t) de css és jpg képek nélkül.
help!
-
rrd
2007 október 4. 15:07:24hubbabubba: a problémádat úgy hívják, hogy trailing slash, keress rá, fogsz találni sok leírást. Másrészről viszont az ezzel való bűvészkedés helyett a magam részéről azt tanácsolnám, hogy használd a minta .htaccess file (#ha nincs favicon sortól kezdve) utolsó sorait, és utánna bízd rá a szerver oldali programra a paraméterek feldolgozását (ott a hack változóba kerül, de lehet éppen oldal is).
Ez hordozhatóbbá és biztosabbá teszi a programot.
-
kola
2007 október 12. 07:04:14Sziasztok!
Szeretnék egy ilyet csinálni:
valami.hu
valami.hu/alma
valami.hu/korte stb.tehát egy olyan megoldás érdekelne, ami “szétdobja” a lapokat (az alma, korte mappákban lenne az index.php)
eddig alma.valami.hu és korte.valami.hu volt aldomainként, de lehet kénytelen leszek az aldomaineket megszüntetni, ezért érdekel erre működő, jó megoldás
előre is THX
-
rrd
2007 október 12. 07:09:04kola: nem igazán értem a problémádat. Csinálasz egy korte alkönyvtárat és hari.
-
kola
2007 október 12. 09:40:13valami.hu-ban van egy .htaccess
RewriteEngine on
RewriteBase /RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ /index.php?page=$1 [QSA]
ba beírom: valami.hu/alma ez még jó is
de ha tovább írom: valami.hu/alma/piros ez már nem létezik, tehát a rövid URL-t akarom használni majd az alma, korte mappákban is -
rrd
2007 október 13. 02:11:44kola: legegyszerűbben úgy tudod kezelni ha az alkönyvtárakba beteszel egy egy külön .htaccess filet.
-
kola
2007 október 13. 14:31:09értem, és az hogy nézzen ki?
mit alakítsak a fenti htaccess-emen?
vagy új, másféle lenne célravezető? -
kola
2007 október 14. 09:38:40közben azt hiszem rájöttem, én voltam figyelmetlen
miután ezt használjuk:$URI = (isset($_SERVER['REQUEST_URI']) ? substr($_SERVER['REQUEST_URI'], 1) : ”);
$oldal = $URI;kell még egy ilyen:
$oldal = str_replace(“mappaneve/”, “”, $oldal);
ja, és a kt-ban a .htaccess-ben RewriteBase /mappaneve
bocs az értetlenkedésért, nem volt szándékos
-
sajtos
2007 október 26. 11:37:19hello-hallo,
frankón nyit, viszont ha / van a vegen, akkor a kepeket mar a domain.hu/media/ dirbe keresi… ami nekem nem jo, mert ott nincs.
base-el kellene valamit manipulalnom?RewriteEngine on
RewriteOptions MaxRedirects=10
RewriteBase /
RewriteRule ^(.*)media(/*)$ index.fcgi?cat=media [L]koszi!
udv:
sajt -
rrd
2007 október 27. 05:18:31sajtos: nem a base a probléma. Ebből a részből nem látszik, de vagy neked is a trailing slash-re kell keresgetned, vagy hiányzik az a sor ami megmondja neki, hogy ha létező filet kérsz le akkor szolgálja ki.
-
sajtos
2007 október 27. 05:49:24rrd: koszi, megprobalkozom vele!
-
almos
2007 november 6. 07:59:07Hello!
Egyszerusitett url t szeretnek visszakapni az alabbi linkbol.
index.php?modul=home&target=ter/home/ter/ -t szeretnek visszakapni, de valamiert nem akar osszejonni.
A CSS es kepek eltunese nalam is elojott, de egy base href= a headerbe megoldotta a problemat, de ez nem igazan nyerte el a tetszesemet. A favicon utanni reszt probaltam, de nem mukodott. Van esetleg egyebb javaslat?
minden amit nem akarnek cserelni skins/ konyvtarban vanElore is koszi
-
rrd
2007 november 6. 19:06:59almos: Ha esetleg betennéd, hogy mit próbáltál (mármint az összes utasítást) akkor megnézem mit lehet rajta módosítani. De senki helyett nem oldom meg a problémáját
Azért van a cikk, hogy az alapján megoldjátok magatok
-
almos
2007 november 6. 19:11:37Igazabol ha jol ertelmeztem a reg exp kifejezest index.php?module na itt a kerdojelnel van gond, most mar nem tudom melyik a veglege, mert annyiszor atirtam mar
RewriteEngine on
RewriteOptions MaxRedirects=10RewriteRule ^(.*)(index[.]php[?]module[=]){1}(.*)[&](target[=])(.*)$ /home/$3/$5/ [QSA,R,L]
de ez szerintem most nem is mukodik.
-
rrd
2007 november 6. 19:34:22almos: Egyrészt a ? az egy reguláris illesztő kifejezés, szóval ha magát a ?-et akarod keresni akkor escapelni kell \?. Ugyanez a helyzet a ponttal.
Másrészt ha hiányzik a ha nincs favicon, fa nem létezik a file és a ha nem létezik a könyvtár kezdetű feltétel akkor nem kell csodálkozni, hogy a css elveszik.
Harmadrészt a reguláris kifejezésed teljesen rossz. Kicsit annak kéne utánnaolvasnod, hogy hogyan működik a regexp. Hamarosan felrakok ide egy kis scriptet amivel tudsz illeszkedésvizsgálatot végezni, az segít lecsekkolni, hogy jó-e a regexp vagy nem. -
almos
2007 november 6. 19:54:07A CSS eltunest most nem raktam be ,de arra hasznalom a
RewriteCond %{REQUEST_FILENAME} !favicon.ico [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-dszabalyokat. ha kiveszem a html header bol a base href direktivat akkor viszont nem megy.
Ez a regexp lehet, h nem jo, csak hirtelen kimasoltam valamit, de egyebkent en is hasznalok ilyen regexp checket, es ott lattam, h a megfelelo substringekre darabolja, de valahogy .htaccess ben nem mukodott.
http://www.quanetic.com/regex.php itt neztem a kifejezest, ereg modban es ott mukodik a
index.php?module=home&target=ter
linkre.
eh, nem ertem -
rrd
2007 november 6. 20:31:43almos: Itt tesztelheted
Most megint a szabályaid felét tetted ide be. Szívesen segítek, de nem fogok találgatni ha nem teszed be a teljes szabály listádat.
Ha a mintád jónak bizonyul és mégsem működik a rövid cím akkor meg meg kell nézni, hogy az apache biztosan kezeli-e a rewrite-ot. Ezt legegyszerűbben úgy tudod megtenni ha a .htaccess fileodba betezsel valami nem odaillő utasítást, (pl Mond, hogy GÓRANGA!) és ha hibát dob akkor már tudod, hogy figyelembe veszi a helyi .htaccess fileokat.
-
almos
2007 november 6. 21:58:49Eloszor is nagyon koszi a linket.
RewriteEngine on
RewriteOptions MaxRedirects=10RewriteRule (.*)index.php\?module=(.*)&target=(.*) /vanq/$1/$2/ [R]
RewriteCond %{REQUEST_FILENAME} !favicon.ico [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^([a-zA-Z0-9]+)/?([a-zA-Z0-9]*)/?$ index.php?module=$1&target=$2 [QSA,L]
A rovid url gyartas tovabbra se vezet eredmenyre, pedig a teszt oldalad is azt mondja, hogy illeszkedik a mintara.
ellenben ha a rulet lecserelem az alabbira:
RewriteRule (.*)index.php(.*) /vanq/$1/ [QSA,R]
(tehat a kerdojelig vagom) akkor mar elkezdi darabolni
es uj urlt gyart.Masik iranyba jol mukodik, leszamitva a CSS -est.
-
rrd
2007 november 6. 22:05:41almos: az R flag nem kéne az lesz a baja. R flaggel kizárólag létező URL-re lehet átirányítani. Hagyd le és jó lesz. (legalábbis remélem
) -
almos
2007 november 6. 22:11:14Hat nem nyert .
Ellenben kivettem a rulebol a ? jelet
RewriteRule (.*)index.phpmodule=(.*)&target=(.*) vanq/$2/$3/ [R]es beadtam neki linkbe a
index.phpmodul=home&target=terakkor szepen megcsinalta /home/ter/ -t :S
-
rrd
2007 november 6. 22:40:28almos: escapeld a ?-t. Most látom, hogy amit beírtál csak az egyik helyen van escapelve.
-
almos
2007 november 6. 23:15:06aha persze, de megprobaltam mar anelkul is.
-
regthings
2007 november 22. 09:34:32szia
Csinaltam egy ilyet:
RewriteCond %{THE_REQUEST} ^(.*)comm=10$
RewriteRule ^(.*)$ http://localhost/akarmi/logoutde nekem a bongeszobe a kovetkezo url jon letre, mikor egy olyan linkre kattintok amiben van comm=10:
http://localhost/akarmi/logout?comm=10ez viszont nem jo nekem, csak igy kene letrejojjon:
http://localhost/akarmi/logout
valahogy a %{THE_REQUEST} -et nullazni kene vagy nem tudom… -
tanar
2007 november 26. 09:52:02Hi
Tud valaki megoldást arra, hogy a http://www.domainom.hu át van irányítva php header()-el a http://www.masikdomain.hu/domainom-ra. Ennek technikai okai vannak (másik szerver).
De én azt szeretném, hogy a http://www.domainom.hu látszon az url-ben, és alatta a http://www.masikdomain.hu/domainom adja vissza a tartalmat. Azt gondoltam, hogy URL rewrite-at meg lehet oldani a kérdést. Viszont nem jövök rá a megoldásra, hiába szenvedek vele.
Szerintetek lehet ilyet egyáltalán? -
rrd
2007 november 26. 17:19:27tanar: ha ezt meg lehetne csinálni, akkor gyorsan csinálnék egy rakás banki belépő oldalra hasonlító oldalt ami az én szerveremen menne, de az url-ben az ő címük jelenne meg. A felhasználók meg szépen megadnák a jelszavukat én meg elkezdenék sokat sokat utalni a saját számlámra az övékről…
Szóval ez nem fog menni. De miért nem csináltatod meg a nameszerver szolgáltatónál az átirányítást?
-
rrd
2007 november 26. 17:24:34regthings: Szerintem nem kell neked a rewritecond.
RewriteRule ^(.*)comm=10$ http://localhost/akarmi/logout [L]
-
tanar
2007 november 26. 17:45:58rrd: Akkor fogj egy üres oldalt, hozz létre benne egy frame-t, és írd bele tartalmának a banknak a webcímét. Sokat nem értél el vele, hiszen a bank webcíme továbbra is oda mutat, mint eddig. Ebből te nem leszel milliomos, viszont az én problémámra ez a megoldás jó lenne (ezért is gondoltam, hogy meg lehet oldani rewrite-al), csak szeretnék valami szebb megoldást.
Egyéb ötlet vki? -
rrd
2007 november 26. 18:00:29tanar: lényeg, hogy amit te akarsz az komoly biztonsági problémát jelentene. Rewritetal nem fog menni. MArad a nameszerver átállítás.
-
Tobias
2007 november 27. 19:52:11Sziasztok!
Egy php keretrendszeren dolgozok, amiben elég fontos lenne az átirányítás.
Úgy szeretném megoldani .htaccess fájlban, hogy átirányítson minden létező és nem létező url-t, abban a könyvtárban lévő index.php-re, amelyben a .htaccess fájl is van. Mindezt úgy, hogy lényegtelen legyen, hogy a DOCUMENT_ROOT-ban van-e vagy az alatta lévő könyvtárak valamelyikébe.Most ott tartok, hogy sajnos meg kell adnom, hogy a DOCUMENT_ROOT -alatt melyik könyvtárban van, mert különben, ha az böngésző címsorába bármilyen urlt adok meg aminek a vége index.php akkor ha létezik azt futtatja le.
RewriteEngine on
RewriteOptions MaxRedirects=10#RewriteBase /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ $1/ [L]#RewriteCond %{REQUEST_FILENAME} !%{DOCUMENT_ROOT}/moocowfw/index.php
RewriteCond %{REQUEST_FILENAME} !index.php
RewriteRule ^(.*)(/*)$ index.php?module=$1 [L,QSA] -
Tobias
2007 november 27. 19:53:02Lemaradt:
RewriteEngine on
RewriteOptions MaxRedirects=10#RewriteBase /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ $1/ [L]#RewriteCond %{REQUEST_FILENAME} !%{DOCUMENT_ROOT}/moocowfw/index.php
RewriteCond %{REQUEST_FILENAME} !index.php
RewriteRule ^(.*)(/*)$ index.php?module=$1 [L,QSA] -
rrd
2007 november 28. 09:52:49Tobias: Ezt úgy tudod megoldani, hogy minden alkönyvtárban lévő .htaccess fileban megadod a RewriteBase direktívát. Egyébként a cakePHP keretrendszer pont így kezeli az átirányításokat mint ahogy te szeretnéd. Töltsd le, és nézz bele a /.htaccess, a /app/.htaccess és a /app/webroot/.htaccess fileokba. Szerintem könnyen rájössz ebből a megoldásra.
-
Tobias
2007 november 28. 11:52:21rrd: Ha beálítom a RewriteBase-t akkor nem jelennek meg a képek amit egyébként az index.php-ben base64 kódolással tárolok. Tehát csak akkor megy, ha nincs RewriteBase-t megadva.
Közben erősen próbálkoztam és most úgy tűnik hogy úgy megy, ha leveszem a vizsgálatot teljesen az index.php-ről.
Azt hittem, ha nincs index.php vizsgálat akkor túlhajtja az átirányítást és nem tölti be az oldalt. Még tesztelem de most perpill így megy:RewriteEngine on
RewriteOptions MaxRedirects=10RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ $1/ [L]RewriteRule ^(.*)(/*)$ index.php?module=$1 [L,QSA]
-
tone
2008 március 7. 02:46:17hello
egy egyszerű rewriteot szeretnék csinálni (legalábbis annk tűnt):
1. http://www.valami?page=nyitooldal => http://www.valmi/nyitooldal
ezzel nem volt gond, hiszen szerepel itt is jópárszor, múködik is2. http://www.valami?lang=hu => http://www.valami/hu
ez sem volt gond, ez is szerepelt már, asszem, ez is megy3. http://www.valami?page=nyitooldal&lang=hu => http://www.valami/nyitooldal/hu
na ezt már nem vette be…
4. ha bármi más jön, ami nem file v dir, akkor meg http://www.valami
ez van a .htaccess-ben (nem vagyok biztos, hogy kell-e a sok RewriteCond, de ha elhagytam, akkor még annyira sem ment, mint most):
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(hu|en)$ index.php?page=$1&language=$2RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(hu|en)$ index.php?language=$1RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1és még egy dolog, az utolsó rule hivatott a hibás url lekezelésére (a $page változót php-ben vizsgálom) pl: http://www.valmi/nincs_ilyen_oldal -lal működik is, de ha http://www.valmi/nincs/ilyen/oldal van, akkor megint nem jó, a hiba pedig az, hogy nincs css és nincsenek képek az oldalon;
ha van valkinek ötlet, akkor örülnék, ha megosztaná;
üdv
tone -
rrd
2008 március 7. 09:47:42tone: Az utasítások soronként értékelődnek ki, tehát a !-f és a !-d utasítás elég egyszer a végén a page-es utasítás előtt.
RewriteRule ^(hu|en)$ index.php?language=$1
Ennek így semmi értelme. A zárójelekben lévő rész sosem fog illeszkedni egy url-re.RewriteRule ^(.*)/(.*)/(.*)$ index.php?page=$2&languauge=$3
Ha jól értem valami ilyesmi kellen neked.Nem próbáltam ki, de érdemes lenne ezzel próbálkozni.
De ha már egyszer hozzáférsz a phphoz, akkor felesleges a rewriteruleokat bonyolítgani. Használd egyszerűen a
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1
utasításokat és minden egyéb varázslatot meg csinálj meg php-ból. -
tone
2008 március 7. 15:46:40hello,
megfogadtam, a tanácsod, és sikerült elérni, amit szerettem volna, de örömöm mégsem felhőtlen;
most ezt használom:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1és ahogy mondtad a többit a php csinálja…
az oldal és nyelv változokat szétválasztom, aprobléma pedig megint a képekkel (és egyéb relativ hivatkozásokkal van)tehát a http://www.valami/nyitooldal/hu esetén az oldal jó, a nyelv jó, és a többi nem; mert ugye a képet így keresi ekkor: http://www.valami/nyitooldal/images/kep.gif, ami ugye nincs;
ezt jelenleg úgy korigálom, hogy a relativ hivatkozások elé beszúrok egy ‘http://’.$_SERVER['SERVER_NAME'].’/’ tartalmú változót;
ám a célom az volna, hogy ne keljen ezt a változót használni sehol, hanem egy rule intézze mindezt;
ezt találtam ki (persze nem azt teszi amit szeretnék):
RewriteRule ^(.*)(/[^/]*\.(jpg|png|gif|css|js|swf))$ /$2
tudom itt már a reg exp tudásom (is) sántít, de ez járható út? vagy felejtsem el inkább?
-
rrd
2008 március 7. 15:58:17tone: A legegyszerűbb egy base tag használata a html oldal fejlécében
<base href=”http://akarmi.hu” />
Ezzel minden relatív hivatkozásod ehhez a domainhez képest kerül kiértékelésre.
Ha rewrite-tal akarod, akkor meg az első zárójelet bontsd meg az első / jelnél. Valami ilyesmi:
RewriteRule ^([^/]+)/(.*)$ index.php?page=$2
-
GeBA
2008 április 24. 16:22:52Szia!
Nagyon örültem ennek a jól összeszedett írásnak, de a gyakorlati megvalósításnál én is elakadtam valamin. A problémám a következő…
Az oldal egyelőre a saját gépemen fut. Az index.php egy tesztmappa nevű könyvtárban található (a base tag-et ennek megfelelően állítottam be, és így a relatív hivatkozások rendesen működnek is). A “tesztmappa/interjuk” cím behozza a kívánt oldalt, az alábbi szabálynak köszönhetően:
RewriteRule ^interjuk(/?)$ index.php?pg=interjuk [L]Ám ha a “tesztmappa/interjuk/1″ címen szeretném elérni az egyik interjút, azzal már gondok vannak. A szabály:
RewriteRule ^interjuk/([1234567890]+)(/?)$ index.php?pg=interju&id=$2 [L]A probléma az, hogy a rendszer a nem létező “interjuk” mappában keresi az index.php fájlt: “http://localhost/tesztmappa/interjuk/index.php”
És mindez független attól, hogy beállítom-e a RewriteBase-t. (RewriteBase /tesztmappa)
Hol lehet a hiba?
-
rrd
2008 április 24. 16:37:26GeBa: Egy hirtelen ötlet: RewriteRule interjuk/(\d+)(/?)$ /index.php?pg=interju&id=$2 [L]
Szerintem az interjuk elé nem kell a ^ jel, a számok helyett használhatod a \d-t és az index.php elé kell egy /.
-
GeBA
2008 április 24. 17:12:09Az a baj, hogy így meg a localhost gyökerében keresi az index.php-t, holott az a localhost/tesztmappa könyvtárban van. Pedig a RewriteBase be van állítva (da ha kiveszem, akkor sem jobb).
Megpróbáltam azt is, hogy az index.php elé nem csak egy “/” jelet írok, hanem ezt: “/tesztmappa/”, de akkor meg megint azt hiszi, hogy egy interjuk mappában kell keresnie az index.php-t.
-
rrd
2008 április 24. 17:23:13GeBA: akkor másold be lécci ide a teljes .htacces fileod tartalmát és megnézem.
-
GeBA
2008 április 24. 17:51:02Ó, sokkal egyszerűbb volt a hiba, mint gondoltam! $2 helyett $1-et kellett volna írnom a szabály végére. Most működik.
Köszönöm! -
Lali
2008 április 29. 00:30:42Hello!
Lehetséges-e olyan rewrite rule-t írni ami az index.php-t ne jelenítse meg? Tehát ha beírom a böngészőbe hogy http://www.domain.com akkor maradjon ez a cím, és ne alakítsa át http://www.domain.com/index.php alakra (mert megtalálta az indexet). Vagy ha nem oldható meg rewrite rule-al, akkor hogyan?
-
rrd
2008 április 29. 09:07:18Lali: Ez nem rewrite kérdés, hanem webszerver beállítás. Apache finomságokban nem vagyok otthon.
-
Csaba
2008 május 16. 13:23:04Szia!
Kellene egy kis segítség, mert nem igazán akar összejönni ez az url rövidítés. Pedig szerintem minden jó, vagy mégse.
A .htaccess filém:
RewriteEngine on
RewriteOptions MaxRedirects=10
RewriteRule ^(.*)valami/(.*)$ index.php?oldal=$2 [NC]RewriteCond %{REQUEST_FILENAME} !favicon.ico [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?act=$1 [QSA]Az oldal addig működik, amíg, csak a domain név van beírva.
Mihelyt beírok a domain mögé egy ilyet /valami/siteEgyből azt írja, ki hogy a keresett file nem található.
Mi lehet itt a bibi?
Köszi a segítséget előre is.
-
rrd
2008 május 16. 13:37:16esetleg ez: RewriteRule ^(.*)valami/(.*)$ index.php?oldal=$2 [NC,QSA,L]
-
Csaba
2008 május 16. 13:50:51Semmi változás
-
rrd
2008 május 16. 14:54:11Csaba: akkor próbáld meg úgy, hogy a következő 4 sort kikommenteled. Jónak kellene lennie, itt teszteltem: http://webmania.cc/static/pregteszt.php
Megy egyáltalán a rewrite? Dob hibát ha beleírsz valami szemetet? -
Csaba
2008 május 16. 15:11:06Még mindig nem megy.
én is teszteltem ott, és nekem is jó volt, azért nem értem, hogy miért nem müködik.
Rewrite megy-e? Hát nem tudom, hogy milyen hibát kellene, hogy dobjon, de a
RewriteRule zagyvaság -ra404-es A keresett file nem található hibát kaptam.
Egyébként azért megkérdeztem most e-mailben a szolgáltatót is, válasz még nuku.Hát nem tudom, hogy mi a fene lehet.
-
rrd
2008 május 16. 15:24:53Csaba: szedj ki mindent a .htaccess fileodból és írd bele, hogy namosthúdeletesztelem. 500-as Internal Server Errort kellene eredményeznie. Ha nem akkor nem megy a rewrite.
-
Csaba
2008 május 16. 15:31:33Úgy néz ki tényleg nem megy nálam
[404] ERROR A keresett file nem található
Ezt a hibát kaptam.
Akkor ezt a szolgáltatómnál kellene követelnem, vagy én is tudok ellene tenni valamit?
-
rrd
2008 május 16. 15:42:12Csaba: szolgáltató tud infót adni.
-
Csaba
2008 május 16. 15:46:24Köszi a segítséget.
-
GIstván
2008 május 22. 23:32:03smarty + php, c-paneles tárhely, hova tegyem a htaccesst?
Ennek elvileg működni kéne:
Eredeti link
http://infoabc.hu/index.php?categoryID=37htaccess:
RewriteEngine on
RewriteRule ^(.*)categoryID/(.*)$ index.php?categoryID=$2 [L]
—
hatástalan, alkönyvtárkban van ht. deny from all bejegyzés, a public_html-ben eredetileg nincs htaccess. Ez egy webshop, amitátalkítottam. Itt éppen akadásom van. -
GIstván
2008 május 22. 23:35:45a rewrite megy, a hűdepiszkosulletesztelemre 500-as hiba
(kieg. smarty problémához) -
rrd
2008 május 23. 10:54:04GIstván: a public_html-be kell a .htaccess
-
GIstván
2008 május 23. 12:00:14Szomorú, de a public_html-be helyezve nincs változás. De 500-as hibát könnyedén eltudok érni sima szöveggel, tehát a modul működik. A RewriteRule után bátmit írok, semmi sem történik.
-
rrd
2008 május 23. 12:14:04GIstván: Most látom, hogy sehol sem írtam le a cikkben, hogy a fenti példa rewrite-okat illene egy ifmodule /ifmodule páros közé rakni, így:
<IfModule mod_rewrite.c>
RewriteEngine on
#és a többi cucc
</IfModule>Ez azért kell, mert ha nincs is bekapcsolva a modul akkor is tudsz ugyan hibát generálni, de a rewrite nem fog nélküle menni. Szóval ha az ifmodul-ok közé téve a hibatesztelő stringet is hibát kapsz, akkor megy a modul, de a szabályoddal van hiba. Ha nem kapsz rá hibát, akkor meg nem megy a modul. Ebben az esetben a szolgáltató tud nyilatkoznia továbbiakról.
-
GIstván
2008 május 23. 12:57:02Köszönöm a segítséged a alábbi prg:
RewriteEngine on
tesztlefutása után bejött a hibaüzenet, vagyis megy a modul. Agyalok
-
rrd
2008 május 23. 14:02:49GIstván: Nem egészen. Ez csak azt jelenti, hogy a .htaccess file kiértékelődik. Ezért kell betenni az ifmodul /ifmodul közé, mert az azon belüli rész már csak akkor fog kiértékelődni ha maga a modul ténylegesen fut. Szóval ha ezen belül van a teszt és hibát dob, akkor tudhatod, hogy tényleg fut a modul is.
-
GIstván
2008 május 23. 18:48:55Elnézésed kérem, nem írtam le az előbb, hogy ifmodul /ifmodul között próbálkozom. Nagyon az a sejtésem, hogy a smarty templates miatt talán még sem a public_html-be kell tennem. Szerinted, ha minden könyvtárba ugyanazt a .htaccest teszem, de nem jelölöm meg, hogy melyik könyvtárban vagyok, szóval ez működőképes lehet?
-
rrd
2008 május 23. 19:22:56GIstván: Nem, az úgy nem fog menni. Máskülönben meg a smartynak nem kéne semmit befolyásolnia az ügyön, mert az átirányítás azelőtt történik, hogy a smarty meghívódna.
A rule-od jó. Hibaüzenetet kapsz ha hülyeséget írsz, elvileg a modul fut. a .htaccess jó névvel szerepel, és olvasható, máskülönben nem kapnál 500-as hibát. Elfogytak az öteleteim.
Ha hozzáférsz az apache error log-jához, akkor ott esetleg találhatsz valami infót, hogy mi a baja. Vagy elküldheted neme mailben a .htaccess fileodat, letesztelem nálam működik-e.
-
GIstván
2008 május 23. 20:32:16Erre a proba .htacces-ra:
bubu
RewriteEngine on
RewriteRule ^(.*)categoryID/(.*)$ index.php?categoryID=$2 [L]Ezt kapom
[Fri May 23 19:02:33 2008] [error] [client 84.0.24.199] File does not exist: /home/infoabc/public_html/404.shtml
[Fri May 23 19:02:33 2008] [error] [client 84.0.24.199] File does not exist: /home/infoabc/public_html/favicon.icoHa a bubu-t kiveszem nincs hibaüzenet, de nem is történik semmi
-
GIstván
2008 május 23. 20:35:23Bocs, nem jó sort másoltam ki, a bub-s tesztre ezt kaptam
[Fri May 23 20:32:44 2008] [alert] [client 89.132.54.245] /home/infoabc/public_html/.htaccess: Invalid command ‘bubu’, perhaps mis-spelled or defined by a module not included in the server configuration -
rrd
2008 május 23. 20:43:31GIstván: Küld már át nekem azt a .htaccesst úgy ahogy van: rrd[@]1108.cc
-
Ábel
2008 május 26. 19:52:51Hello!
Szeretnék egy kis segítséget kérni. Megcsináltam a rewrite függvényeket és működik is, viszont, ha beírok egy címet (http://valami.hu/cikk/12), akkor a böngésző címsorában átíródik a szöveg arra a címre ahoca átírányítom a rewrite-tal (http://valami.hu/index.php?p=cikk&id=12).
Hogyan tudnám megtartani az előző címet úgy, hogy mégis működjön? -
rrd
2008 május 26. 20:02:17Ábel: attól függ hogyan csináltad. Ha használtad az R flag-et akkor ez történik.
-
Ábel
2008 május 26. 20:55:02RewriteRule ^(.*)cikk/(.*)::(.*)$ http://hsps.hu/index.php?p=news&cikk=$2&datum=$3 [L]
Így néz ki. Segíts kérlek!
-
rrd
2008 május 26. 21:01:58Ábel: nem kell a http, csak a relatív út.
RewriteRule ^(.*)cikk/(.*)::(.*)$ index.php?p=news&cikk=2&datum=3 [L]
-
Ábel
2008 május 26. 21:19:19Nagyon jó, köszönöm szépen a segítséget!
-
rrd
2008 július 18. 13:31:52Derk: És ha /pics/kep.jpg-ként hivatkozol a képekre?
-
rrd
2008 július 18. 13:34:44Derk: És ha /pics/kep.jpg-ként hivatkozol a képekre? (a base-sel együtt persze)
-
Derky
2008 július 19. 08:50:13Ok, most már képek és minden jó. Már csak egy probléma adódott.
A # jelet nem veszi figyelembe a linkben. Megnéztem más fórumokon és ott se találtam rá megoldást. Az [NE] flag-el néztem és úgyse volt jó.
RewriteEngine on
RewriteRule ^.*-([0-9]*)/.*-([0-9]*)\.html$ index.php?main_id=$1&al_id=$2#ugras [L]Köszi előre is
-
Derk
2008 július 19. 08:56:23Szia!
Nagyon jó a cikked. Végigolvastam a hozzászólásokat is.
Nekem is az a gondom, hogy minden működik, de a képeket az új nem létező könyvtárba keresi.
A teljes .htaccess file:
RewriteEngine on
RewriteRule ^.*-([0-9]*)/.*-([0-9]*)\.html$ index.php?main_id=$1&al_id=$2 [L]Az akarmi.hu/fotermekcsoport-1/altermekcsoport-5 működik, csak a képeket nem találja, mivel azokat is itt keresi.
A módszer nem működik.
Előre is köszi a segítséget.
-
Derk
2008 július 19. 08:58:51Az előbb kivágott egy részt. Gondolom a kacsacsőrök miatt. Megpróbálom a nélkül:
Hiányzó rész:
A base href=”http://akarmi.hu/” módszer nem működik. -
rrd
2008 július 19. 09:46:44Derk: és hogyan hivatkozol a html-ben a képekre? Amit leírtál annak jónak kellene lennie.
-
Derk
2008 július 19. 10:50:25Így hivatkozok a képekre a php-ban:
“pics/background.jpg”A képek a gyökérkönyvtár/pics -ben vannak.
Az átalaktás után a fotermekcsoport-1/altermekcsoport-5/pics -ben keresi őket.
A többi része működik a: .php lejön a fő és alkategóriákat tökéletesen kilistázza, már csak ezt kéne megoldani.
Köszi
-
Johny
2008 július 25. 15:50:03Szia!
Olyan jelegű problémám lenne, hogy adott egy virtuális link:
Pl.:
oldal.hu/focsoport/alcsoport/alalcsoport.htmlSzeretném lekérdezni a path-ot.
Természetesen “PHP_SELF”-el próbáltam, de az a valós path-ot adja hanem: oldal.hu/webshop.php
Néztem “SCRIPT_FILENAME”, “SCRIPT_NAME”, “PATH_TRANSLATED”, “REQUEST_URI”-al de ugyanez a helyzet.
A “HTTP_REFERER” tökéletes lenne csak az meg ugye mindig az előző oldal linkjét adja meg, nekem a jelenlegi használatba lévő teljed virtuális link kellene.
Előre is köszi a segítséget.
-
rrd
2008 július 25. 19:36:51Johny: Gondolom az url alapján változókat adsz hozzá, szóval a $_GET tömbben ott kell lennie annak amit keresel.
-
Csaba
2008 július 28. 15:05:10Szia!
Virtuális hostokat szeretnék megvalósítani, user.domain.hu-t átirányítani domain.hu/users/user címre.
Már nagyjából meg is vagyok, http://user.domain.hu-ra remekül működik is a kód. Még azzal szeretném kiegészíteni, hogy http://www.user.domain.hu -ról változzon a cím http://user.domain.hu-ra.
Sehogy sem boldogulok a www-és résszel, a kódom a következő:RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain.hu$ [NC]
# ha a cím http://www.domain.hu volt akkor nem
RewriteCond %{HTTP_HOST} !^www.domain.hu [NC]
RewriteRule ^(.*)$ users/%1/index.php [QSA,L]Ha van valami ötleted, akkor azt szívesen fogadom.
Köszi
Csaba -
rrd
2008 július 30. 18:34:37Csaba: nem tudom olvastad-e a cikket itt egy kicsit feljebb de ott van benne a pontos válasz. Egyszerűsített hostnevek
-
Yenka
2008 augusztus 22. 01:11:58Szia rrd!
Én csak azt szeretném megkérdezni, hogyha egyszer már készítettem egy ilyet:
RewriteRule ^([a-zA-Z0-9_]+)/?([0-9]*)/?(.*)/?(.*)$ index.php?contentid=$1&cat_id=$2&menu_id=$3 [L,QSA]
és ez megy is rendesen, akkor mégegy hasonlót már nem lehet?
Pl egy ilyet:
RewriteRule ^([a-zA-Z0-9_]+)/?([0-9]*)/?(.*)/?(.*)$ index.php?contentid=$1&tema_id=$2&cikk_id=$3 [L,QSA]
?
mert annak idelyén úgy készítettem el az oldalt, hogy a contentid válogatja le hogy mit akarok meghívni. és szóval így mind a kettőre szűkségem lenne, de nem akar menni.
Segítséged előre is köszönöm! -
rrd
2008 augusztus 22. 07:49:57Yenka: Ugyanazt a rule-t nem irányíthatod kétfelé. Amikor a sorrendben előbb álló rule érvényesül a string átalakul, ha ott az L flag akkor a rewrite ki is lép. Ha nincs L flag akkor ugyan továbblép, de akkor már az átalakított stringet hasonlítja a következő rule-hoz.
De ha mindkettőre szükséged van akkor miért nem házasítod össze a két rule-t eggyé?
-
Yenka
2008 augusztus 22. 09:57:07Köszönöm a gyors választ!
Igazából azért nem házasítom össze, mert nem tudom, hogy hogy kell.
Ezt a dolgot, még csak most tanulom, és még nem sok mindent tudok belőle.
Hogy álljak neki? Vagy hol találok erről a dologról egy kis leírást? Már kerestem sok helyen, de sehol nincs róla egy kimerítő leírás, persze a tiéden kívül! -
rrd
2008 augusztus 22. 13:36:00Yenka: attól függ mit is szeretnél, de ha végigolvasod a cikket akkor össze kéne tudnod rakni.
Az összeházasítás valahogy így nézne ki:
RewriteRule ^([a-zA-Z0-9_]+)/?([0-9]*)/?(.*)/?(.*)$ index.php?contentid=$1&cat_id=$2&menu_id=$3&tema_id=$2&cikk_id=$3 [L,QSA] -
Yenka
2008 augusztus 22. 14:07:06Köszönöm!
Közben már átolvastam, újra legalább 3-szor, és sikerült is megoldanom!Köszönöm még egyszer!
-
pan
2008 október 25. 01:54:40Szia
Köszönöm a részletes leírást. Olyan megoldást keresek, ahol általánosan tudok átadni paramétereket az url-ben.
Például:
domain.hu/par1/par2/par3 (és / jel opcionálisan a végén)Ebből:
index.php?p1=par1&p2=par2&p3=par3
Tudnál segíteni a regex formulánál? Az alábbi kód sajnos nem minden esetben ad jó eredményt.RewriteEngine on
RewriteRule ^(.+)/(.+)/(.+)/?$ index.php?p1=$1&p2=$2&p3=$3 [L]
RewriteRule ^(.+)/(.+)/?$ index.php?p1=p1&p2=$2 [L]
#RewriteRule ^(.+)/?$ index.php?p1=$1 [L]Hiába illeszkedik az első sorra az url, nem áll le a kiértékelés és az utolsó sor agyonvágja az eredményt; a / jel a sor végén az utolsó paraméterhez csapódik; és 3-nál több paraméter esetén a p1 éréke pl. “par1/par2″
Köszönöm a segítséget…
-
rrd
2008 október 25. 12:39:50pan: az L flag után nem megy tovább valami más lesz a hiba. Sajnos nincs módom letesztelgetni, hogy nálad mi lehet a gond, de valószínűleg a regex körül sántít valami.
Itt tesztelhetsz: http://webmania.cc/static/pregteszt.php
-
pan
2008 október 26. 00:03:07Kösz a választ. A
RewriteEngine on
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?p1=$1&p2=$2&p3=$3 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?p1=$1&p2=$2 [L]
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?p1=$1 [L]jónak tűnik. Pesze kiszűri az alkönyvtárakban levő fájlokat.
Van mód arra, hogy ha pontot tartalmaz a domain.hu/ utáni rész (ez fájlra való hivatkozást jelent), akkor ne csináljon semmit az url-lel és fejezze be a feldolgozást?Tehát, ha ^(.*)\.(.*)$ akkor ne csináljon semmit az url-lel
-
rrd
2008 október 26. 09:08:04pan: a létező címek (alkönyvtárak) változatlanul hagyását egy RewriteCond segítségével tudod megoldani. Fent több helyen is szerepel a ha nem favicon, ha nem létező könyvtár és ha nem létező fájlról van szó akkor… típusú példa.
-
pan
2008 október 27. 01:30:30Kösz a választ.
A fenti kód (előző post) szerencsére megoldja a file problémát, mert a file-ok tartalmaznak pontot, így eleve nem felelnek meg a kritériumnak.
Ami viszont továbbra is probléma, hogy valamiért aRewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$
regex maszk illeszkedik pl. a
domain.hu/par1////par2/par3
url-ekre is (több / jel egymás után). Valamiért nem tesz különbséget, hogy csak egyszer vagy többször szerepel a / jel.
-
rrd
2008 október 27. 10:01:04pan: nem illeszkedik
-
pan
2008 október 27. 12:13:06Valóban nem, de az apache regex mégis elfogadja.
Például a
http://webmania.cc////////url-atirasok-apache-mod-rewrite/
gond nélkül megy.
Ez Apache probléma… -
tom
2008 október 28. 14:17:51szia.
lehet hogy nem idevaló a problem, de hátha tud segiteni valaki.
2 dyndns cim ugyarra az ip-re mutat
router a 80-as portra bejövő kéréseket az egyik gép apacheának dobja és azt szeretném hogyha a kérés http://másik.gép.dyndns.neve/ alapu akkor a válasz másik gépen (csak a belső hálón elérhető) futó apacheon keresztül jöjjön. rewriterule ^/.* http://192.168.1.100/$1 persze nem jó. úgy meg lehetne oldani hogy más porton jöjjenek a másik gépnek szóló kérések és a router virtualserver szekciója válogasson. de én azt szeretném ha mindkét gép a 80-as porton volna elérhetőköszi
-
DTB
2008 december 10. 23:24:11Szia,
Klassz irás, használható. A napokban találtam egy hasonló oldalt, szivesen belinkelem, esetleg ez alapján még néhány részt frissíthetsz a tartalmon.
a link:
http://www.askapache.com/htaccess/ultimate-htaccess-file-sample.html -
Ludowico
2009 március 2. 22:02:12Szia!
Nekem az a problémám, hogy a szerveren a következő könyvtárra mutat a virtualhost:
/var/www/valami
De maga a weboldal fizikailag itt van:
/var/www/valami/webroot
Eddig a /var/www/valami könyvtárba tettem egy index.php-t, amiben egy sima header-es átirányítás volt a webroot könyvtárra. Működik, de bután néz ki az URL a böngészőben, hogy http://www.weboldal.hu/webroot/index.php
(ez szebb lenne: http://www.weboldal.hu)Azt szeretném, hogy a /var/www/valami könyvtárba az index.php helyett egy .htaccess fájl segítségével automatikusan átirányítsam a /var/www/valami/webroot könyvtárra…és onnan fusson az index úgy, hogy az URL-ben ez legyen: http://www.weboldal.hu/index.php
Huhh, elég hülyén fogalmaztam, remélem azért érthető valamennyire.
Tudsz segíteni?
Eddig kb ennyit hoztam össze, de nem megy:
RewriteEngine on
Options +FollowSymLinks
RewriteOptions MaxRedirects=10
RewriteRule ^/webroot/(.*)$ http://www.weboldal.hu/$1 [R=301,L]Köszi
Ludowico -
rrd
2009 március 3. 09:48:47@Ludowico nem lenne kézenfekvőbb a webroot könyvtárból egy szintel feljebb másolni az egész cuccodat?
-
Ludowico
2009 március 3. 09:56:46Lehetne…, vagy akár átírni a httpd.conf-ban a virtualhost elérési útját, hogy a beljebb levő könyvtárra mutasson, de sajnos egyikre sincs lehetőség, hogy miért, azt most nem részletezném.
Ezért is gondoltam a rewrite-ra. -
Ludowico
2009 március 3. 11:24:03Na, már nem is érdekes, mert közben meglett a megoldás:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/webroot(.*)
RewriteRule (.*) /webroot/$1 [L] -
Gyurmó
2009 március 15. 21:19:40Sziasztok!
Az lenne a kérdésem, hogy mi van akkor ha több paraméter is tartozik egy urlhez viszont nem minden esetben kap mindegyikhez értéket és ekkor hiba jelentkezik.
Példa:
RewriteRule ^hirdetes/([^/]+)/([^/]+)/([^/]+)/?$ /hirdetes.php?hely=$1&targy=$2&page=$3 [L,NC]és valamikor csak így hívjuk meg az oldalt:
/hirdetes/valahol/
és ilyenkor hiba keletkezik mivel nem adom meg a targy és a page paraméterét.
Szóval a lényeg mit kell tennem, hogy ne akadjon meg ha csak kevesebb paramétert kap az URL?Válaszotokat előre is köszönöm.
-
shamanix
2009 április 3. 12:20:25Végigolvastam az oldalt, és többnyire szép url-eket akartok paraméteres getváltozos url-ekre alakitani. És nem is értem h miért, azt meg lehet php-vel oldani, de nem az a lényeg h a locationben szép, userfriendly url látszodjon és a gugli is szeresse? Én az ellenkezőjét akarom, de a példában irt:
RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]
RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R]nalam nem csinal semmit a http://www.host.com/~user cimre, bár más szabályok működnek, tehat van rewrite modul. És nem értem miért van 2 sor, és mi az az uge.
Amit akarok az az hogy a:
http://www.host.com/?tema1=vmi1&tema2=vmi2 -ből vagy a
http://www.host.com/index.php?tema1=vmi1&tema2=vmi2 -ből
http://www.vmi1.host.com/vmi2 legyenill.:
http://www.host.com/?t1=vmi1&t2=vmi2 -ből vagy a
http://www.host.com/index.php?t1=vmi1&t2=vmi2 -bőlhttp://www.host.com/vmi1/vmi2 legyen
htacces:
RewriteEngine on
RewriteOptions MaxRedirects=10#RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]
#RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R]
#RewriteRule (.*)index.php\?module=(.*)&target=(.*) /vanq/$1/$2/ [R]
#RewriteRule (.*)index.php(.*) /vanq/$1/ [QSA,R]fenti 4gyel probalkoztam, de mint irtam az első 2 nem csinal semmit, a példa urled-re sem, a másik 2 meg nem azt csinalja amit kéne neki, segítenél?
köszi -
rrd
2009 április 3. 14:28:20@shamanix olvasd el mégy egyszer a cikket figyelmesen minden benne van. A ~user kezeléséhez a RewriteBase direktívát kell használni a ~user home könyvtárában. Valószínűleg a mintáid rosszak itt tesztelheted: http://webmania.cc/static/pregteszt.php
-
shamanix
2009 április 7. 08:57:29mintaim pont mint a példa mintáid a reg.exp.tesztelődben:
RewriteEngine on
RewriteOptions MaxRedirects=10RewriteCond %{REQUEST_FILENAME} !favicon.ico [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^http://www.(.*)/index.php\?modul=(.*)&target=(.*)$ http://www.$1/$2/$3 [R]
nem csinal semmit: http://www.host.com/index.php?modul=home&target=ter url-re.
-
rrd
2009 április 7. 09:35:09@shamanix A RewriteRule-nál nem kellenek a http-k, ez csak külső átirányítás esetén jöhetne szóba.
De még mindig azt mondom, hogy nem kaptad el, hogy mit szeretnél
A RewriteRule első szabálya azt mutatja, hogy mi jön az url-ben. Pl amit te írsz az az, hogy az url-ben ilyesmi jön: http://akarmi.hu/index.php?modul=modulNev&target=targetNev. A szabályod szerint valami ilyesmire akarod alakítani: http://akarmi.hu/modulNev/targetNev, azaz a webszerver ezt az url-t fogja megkapni feldogozásra. De létezik ez az elérési út a szerveren? Gondolom, hogy nem. Pont a fordítottja szokott lenni. Az url-ben jön valami http://akarmi.hu/modulNev/targetNev és ezt akarod úgy átalakítani, hogy létező fájlra mutasson a szerveren. Ezért alakítjuk át http://akarmi.hu/index.php?modul=modulNev&target=targetNev formára, mivel az index.php létezik és ő megoldja az átadott get paraméterek alapján, hogy mit kell csinálnia.
Persze ha te pont a fordítottját akarod, akkor az is működőképes, de az elv az ugyanaz. Kapsz egy url-t ami várhatóan egy nem létező file-ra mutat és ezt átalakíttatod egy olyanra ami létezik.
-
shamanix
2009 április 8. 08:50:05http nélkül sem történik semmi,
értem a rewrite rule-t és tovabbra is azt akarom, a kapott linket majd php-val szétszedem, de a probléma az h nem valtozik meg az url, tehat uaz marad, van példa ami mukodik, tehat tudom milyen az amikor mukodik, de a fenti példa az istennek nem akar
mint ahogyan 2007novemberében Álmossal sem jutottatok semmire, lehet h uaz a problema,
-
shamanix
2009 április 8. 09:14:33RewriteRule (.*)index.php(.*) /$2/ [R]
ilyen tipus átiranyitasok mukodnek, lehet hosszabb is, /jelekkel, stb, de mihelyst ? jel kerül a mintába meghal, nem történik semmi, mindegy h escapelem vagy nem a ?jelet, nem értem,
-
thgab
2009 április 25. 14:17:05Köszönöm ezt a részletes cikket! Magyar nyelvű leírást kerestem. Itt mindent megtaláltam amit tudni akartam a mod_rewrite-ról.
-
Edorn
2009 május 16. 08:44:21Azt hogy szokás megoldani, hogy a linkekben szerepeljenek pl a cikkek nevei is?
Pl. ez helyett:
http://valami.hu/index.php?p=1&p2=45
ez:
http://valami.hu/cikkek/ez-egy-cikk-cime.puding -
rrd
2009 május 16. 16:30:04Ilyen esetben a bejegyzésben találhatóak közül azt az átirányítási szabályt szokták használni ami minden nem létező fájl-ra vonatkozó lekérést átad az index.php-nek. Ezután az index.php-ben feldolgozod az url-t és indítasz egy adatbázis lekérést arra, hogy melyik rekordban található olyan, hogy ez-egy-cikk-cime.puding. Persze ezeknek a stringeknek a legyártásához szükséged lesz egy ékezetlenítő eljárásra. Szerintem nézd meg a wordpress-t, ott is így van megoldva.
-
Edorn
2009 május 16. 18:47:22De nagy marha vagyok… Végig azon filóztam, hogy ha index.php-ben találom ki, hogy mi a hozzátartozó tartalom és átirányítom oda (header-el), akkor elveszik a szépen formázott link a címsorban…
Viszont nem átirányítani kell, hanem az index.php-nak megjeleníteni az adott tartalmat átirányítás nélkül. A címsorbeli link meg ilyenkor megmarad…Valószínű azért futottam ilyen csúnyán vakvágányra, mert azzal kezdtem a htaccess átírását, hogy ha nem létezik a link, dobja egy 404-es oldalra… És így az maradt a fejemben, hogy ha nem létezik a link, veszik a címsor…
Ezer köszönet a cikkért és az útbaigazításért, így már menni fog!
-
Will Code PHP for Food
2009 május 22. 20:55:53Köszönöm, nagyon sokat segítettél a cikkeddel.
-
ctrlshift
2009 május 28. 10:32:18Elöljáróban: végigrágtam magam a cikkeden, nagyon köszönöm! De. Mégsem sikerül megoldanom/működővé tennem az alábbiakat:
http://site.com/showcat.php?cat=11
helyett
http://site.com/alabama
URL-t szeretnék megjeleníteni.A rovatokon belül a tartalmak URL-jét viszont a címekből generáltatnám, ráadásul eltérő sorrendben. Tehát:
http://site.com/showproduct.php?product=123456&cat=11
helyett
http://site.com/alabama/elado-lakas-123456Segítséged előre is köszönöm!
-
rrd
2009 május 28. 10:43:50@ctrlshift Ha jól értem a különböző kategóriák szöveges verziói jelennek meg az url-ben, majd pedig a termékek. Ilyen esetben azt tudod csinálni, hogy mindne nem létező url-re való hivatkozást (mint pl a http://site.com/alabama/elado-lakas-123456) ráirányítasz az index.php-ra. Ott pedig az url-t feldarabolod a / jelek mentán és php-ből párosítod a megfelelő kategória / termék párossal. Ha így oldod meg akkor már nem rewrite kérdésről hanem php kérdésről van szó, hiszen csak annyit kell tenned, hogy megoldod, hogy a program ne csak GET-ből hanem az url-ből is elfogadjon paramétereket.
A másik módszer, hogy kézzel felveszel egy-egy szabályt a .htaccess fájlodba minden egyes kategóriához. Ez nem is túl elegáns és nem is túl könnyne fenntartható, szóval jobban jársz ha a másik szálon indulsz el inkább.
-
ctrlshift
2009 május 28. 10:59:04Ezt a villámgyors reagálást!
Nem voltam elég részletes, tehát:
http://site.com/showcat.php?cat=11
rovat (vagy nevezzük kategóriának) barátságos URL-jét manuálisan szeretném megadni (noha mint írod nem lesz túl elegáns a htaccess fájl…), ami adott esetben több szóból állhat (pl.: http://site.com/alabama-es-kornyeke)Majd az ezen a kategórián belül található bejegyzéseket már “automatizáltan” a http://site.com/showproduct.php?product=123456&cat=11 URL-ből.
Itt az eredeti
“site/produktum/kategória” sorrenden is változtatni szeretnék
“site/kategória/produktum” mintára.Lehet, hülyeségeket beszélek: nem vagyok igazán hozzáértő, csak üzemeltetném a készen vásárolt de nem SEO URL-ekkel dolgozó szkriptet.
Ha mod-rewrite segítségével megoldható (még ha nem is a legszebben) kérlek konkrét példával válaszolj (magyarul: mit kellene a htaccess-be másolnom…). Amennyiben nem megoldható, köszönöm az eddigieket!
-
rrd
2009 május 28. 11:16:15Nekem kissé fura, hogy a kategóriák másképpen működjenek mint a termékek, de meg lehet éppen csinálni. Valami ilyesmire lesz szükséged:
RewriteRule ^(.*)alabama-es-kornyeke/([^/]+)(/*)$ showproduct.php?cat=11&product=$2 [L]
RewriteRule ^(.*)masikkategoria/([^/]+)(/*)$ showproduct.php?cat=3&product=$2 [L]
RewriteRule ^(.*)akarmikategoria/([^/]+)(/*)$ showproduct.php?cat=42&product=$2 [L]És annyi ilyen sorra lesz szükséged ahány kategóriád van. Új kategória létrehozásakor azt itt fel kell venni, kategória törlésénél meg jobb ha innen ki van véve.
A product get változódba ilyenkor majd a termék string leírása kerül amit akkor php-ban kicserélsz id-re, vagy hagyod és az alapján keresed ki. -
ctrlshift
2009 május 28. 11:47:12Ma-holnap kipróbálom, nagyon köszönöm a segítséget!
-
Akron
2009 június 15. 23:16:15Szia!
Én az alábbiakra nem találtam megoldást.
Az a feladat, hogy a domainom.hu/valami at legyen iranyitva a domainom.hu/valami.php-ra. Tehát hogy kiterjesztés nélkül is elérhetőek legyen az oldalak. Erre az alábbi .htaccess filet irtam:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ $1.php [L,R,QSA]Ezzel az a gond, hogyha siman a domain van meghívva (domainom.hu/) akkor is hozzá fűzi a kiterjesztést, de ilyenkor ugy az index.php-t kellene meghivni.
Mivel kellene kiegesziteni a kodot?
-
rrd
2009 június 18. 11:48:20A szabályodba nem kell az R flag.
Én a helyedben nem a rewrite-tal oldanám meg a dolgot, mert mi lesz ha valaki meghívja a domainom.hu/nincsilyen-t. Ebben az esetben is problémád lesz. Használd inkább a RewriteRule ^(.*)$ index.php?page=$1 [L,QSA] szabályt és intézd el az átirányítást és hibakezelést az index.php-ból. -
Akron
2009 június 19. 21:12:22Köszi! Jó ötlet
-
wardprod
2009 július 1. 18:16:55Üdv!
Szeretnék értesíteni mindenkit, hogy amennyiben annyit szenvedtetek volna azzal, hogy egy szimpla GET kiiratás sem jött össze, mint nekem, akkor nézzétek meg az appache logot.
2 órát szenvedtem amiatt, hogy nem ment, aztán kiszúrta a szemem, hogy a “RewriteBase /” direkt mappaszerkezetre mutatott, így C:\xampp\blabla-val kezdődött a redirect, és ezért nem ment.
Remélem segítettem ezzel is
-
Ludowico
2009 július 27. 10:32:23Szia!
Egy másik probléma: a következő script simán ment localhoston, xampp alatt:
RewriteEngine on
RewriteBase /fuvaresfoldmunka
RewriteCond %{HTTP_HOST} ^fuvaresfoldmunka\.hu$
RewriteRule ^(.*)$ http://www.fuvaresfoldmunka.hu/$1 [R=301,L]RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1.php [QSA]Azonban amint feltettem egy éles szerverre, sajnos valami gond lett. Az első része ment, tehát a sima www nélküli kérést átirányította www-sre, tehát maga a htaccess megy, engedélyezve van a mod_rewrite, stb. A base itt már / kell, hogy legyen, ezzel nincs is gond.
Hosszas kisérletezgetés után rájöttem, hogy a RewriteCond %{REQUEST_FILENAME} !-f feltétel nem tetszik neki. (A kezdőoldal bejött, de amikor egy menüpontra kattintottam, pl. http://www.fuvaresfoldmunka.hu/bemutatkozas, akkor simán bejött a bemutatkozas.php tartalma, de nem úgy ahogy kellett volna, tehát nem az index.php a bemutatkozas paraméterrel,hanem mintha direktben hívtam volna.) Ezért a RewriteCond %{REQUEST_FILENAME} !-f részt kivettem, helyette betettem ezeket:
#RewriteCond %{REQUEST_FILENAME} !.css
#RewriteCond %{REQUEST_FILENAME} !.jpg
#RewriteCond %{REQUEST_FILENAME} !.gif
#RewriteCond %{REQUEST_FILENAME} !.png
#RewriteCond %{REQUEST_FILENAME} !.xml
#RewriteCond %{REQUEST_FILENAME} !.txt
#RewriteCond %{REQUEST_FILENAME} !.ico
#RewriteCond %{REQUEST_FILENAME} !index.phpés már ment is. Tehát a probléma megoldódott, de nem elegáns, és nem tudom miért nem megy a sima !-f feltétellel.
Az index.php-ban van amúgy egy switch-case szerkezet, ami kiértékeli a page változót és annak megfelelő php-t include-ol a tartalmi részben. Tehát, ha beütjük, hogy http://www.fuvaresfoldmunka.hu/index.php?page=bemutatkozas.php
Akkor a tartalmi részben a bemutatkozas.php-ban levő tartalom jelenik meg,
a .htaccess -el nyilván a következő formában kerülne meghívásra az URL:
http://www.fuvaresfoldmunka.hu/bemutatkozasVan valami ötleted esetleg?
Köszönöm:
Ludowico -
tzs
2009 augusztus 11. 23:16:28Hi!
Én vagyok az ember aki a büdös életben nem fogja felfogni a modrewriteot és a regexp-et:D Viszont nagyon kéne hgoy működésre bírjam a Code Ignitert. Elolvastam az összes tutorialt kipróbáltam mindent amit lehetett, és semmi eredmény. Egy rohadt index.php-t kéne kigyilkolni, pedig a CI lehetőséget ad a configjában hogy eltünjön de nincs eredmény:/
Valaki esetleg használta már a CI + modrewritetot úgy hogy működött is? a domain.hu/index.php/anyam/borogass eléggé félmegoldásnak tűnik, és nem értem ha a WP-s kóderek megoldották, akkor az EllisLab-nál miért nem tudják…
-
Áki
2009 augusztus 29. 11:12:32igaz már régi
, de még mindig hasznos leírás
ezer meg ezer köszönet
sokat segített -
Markovits György
2009 október 29. 11:45:08Nagyon köszönöm. Sokat segítettél.
Megpróbálok megszabadulni a messy urltől a textpattern oldalaimon. -
Ádám
2009 november 12. 12:24:47Szia!
a modrewrite-ot használhatom akkor is, ha apache proxy mögött van wordpress-mu, és egy blog-n szeretném, hogy pl.: egy gomb link alatt ne a wordpress-mu belső url-je látszódjon?
Köszönöm az útbaigazítást.Üdv:
Ádám -
Exalt
2009 november 24. 23:15:31Szia !
Nekem egy olyanra lenne szükségem, hogy ha beírom, hogy http://www.oldal.hu/akarmi, akkor a http://www.oldal.hu/akarmi.php jöjjön be..
Van erre megoldás ?
Köszi
-
Exalt
2009 november 24. 23:42:56Megoldottam.. Köszönöm a leírást.
-
Exalt
2009 november 24. 23:52:04Csak redirect-el tudtam megoldani.. Esetleg máshogy ?? Ez nem igazán jó így..
-
rrd
2009 november 25. 11:33:29@Exalt ez így nem ér
Legalább azt írd le, hogy mire jutottál. Kódot, kódot! -
petrob
2009 november 27. 20:18:49Szevasz!
Alaposan áttanulmányoztam a cikkedet, és a példákat is, továbbá sikeresen megoldottam a problémámat, de lenne néhány kérdésem, melyekre a választ magamtól nem tudtam kikövetkeztetni.
A feladat végül is nagyon egyszerű, mert egy képgalériához írogattam ilyesmi linkeket:/gallery/elephants/ a kategóriák kiválasztásához, /gallery/elephants/5/ az oldalak váltásához, és /gallery/elephants/baby_645342.png/ a képek közelnézetéhez. A részeket változókba szedem, amelyeket a pretty_url.php dolgoz fel aztán.Az általam írt MŰKÖDŐ megoldás:
RewriteEngine on
RewriteBase /
RewriteOptions MaxRedirects=10
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?([^/]+)(.*)/(\w+\.\w+)/?$ pretty_url.php?application=$1&category=$2&file=$3 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\w+\.\w+/?$
RewriteRule ^/?([^/]+)((/[^/]+)*)/?$ pretty_url.php?application=$1&category=$2 [L]VISZONT: Kérdezem a következőket:
Miért nem tudom mindezt megoldani a RewriteRuleok szimpla egymás alá írásával?
RewriteRule ^/?([^/]+)(.*)/(\w+\.\w+)/?$ [L]
RewriteRule ^/?([^/]+)((/[^/]+)*)/?$ [L]
Az első csak a fájlnak tűnő végűekre passzol, a második elvileg mindenre.
Az egyiket kikommentelve(#..) a másik mindíg működik, de ha kiíratom a név-érték párokat, akkor ha mindkettő aktív, ezt kapom: application=pretty_url.php, a többi változó meg üres!Előszörre a specifikusabbra, a fájlra keresek, és ha a minta passzol, akkor az [L] last flagnek meg kellene gátolnia a további szabályok kiértékelését, nem? Ha ez a logika működne, akkor egyszerűen a szabályokat csökkenő specifikusság szerint írhatnám fentről lefelé. Ha ugyan ebben a felállásban kikommentelem a második szabályt, vagy fordítva!, akkor minden rendben!
Próbáltam a skip flaget is az első után [S=1], de ugyan az.
Csak a RewriteCond feltételek ismétlésével tudok egy switch case, case ,case default szerkezethez hasonló dolgot elérni? -
rrd
2009 november 27. 20:26:12@petrob A RewriteCond CSAK a közvetlenül utána következő RewriteRule-ra vonatkozik. Ha egy rule-lal akarod megoldani akkor még a regex-szel kell egy kicsit bíbelődni, vagy mindentől függetlenül a teljes url-t belerakod az application-ba és inkább php oldalon darabolod fel úgy ahogy szeretnéd.
Vagy hagyod így ahogy van mert működik
-
petrob
2009 november 28. 17:45:38Köszönöm a válaszod!
Nagyon jó hogy magyarul is hozzáférhető egy ilyen összefoglaló cikk! A problémákra adott válaszaidból is nagyon sokat lehet okulni. -
Attila
2009 december 15. 15:10:56Üdv,
RewriteEngine on
RewriteOptions MaxRedirects=10
RewriteRule ^(.*)$ index.php?oldal=$1 [QSA,L]Ezt a kódot beírom .htacces file-ba. Xampp-ot használok, c:\xampp_regi\htdocs\ ezen a helyen van az index.php és a .htacces file.
a php kód:
————<a href=”konyvek” rel=”nofollow”>Könyvek</a>
————-
Az az elképzelésem, hogy bejön az index.php, rákattintok a “Könyvek” linkre és kiírja, hogy “konyvek” vagy beírom, hogy localhost/konyvek mert végülis ez a lényeg, de mindenhogy 404-es hibát dob. Ez egyenlőre csak próba lenne, de sehogy se akar működni. Nem tudom, hogy valamit elrontottam a .htacces file-ban vagy az apachnál kell-e állítani valamit. A .htacces file-t azzal a windowsos edit-tel írtam.
Előre is köszönöm a segítséget. -
rrd
2009 december 15. 16:36:11@Attila Első körben azt nézd meg, hogy az a .htacces az inkább .htaccess (két s-sel a végén) legyen.
-
Attila
2009 december 15. 17:34:34XD XD XD Köszi, sztem nem találtam volna ki, már néztem a log fájlokat is, meg mindent
-
WebMánia » Egy év egy bejegyzésben 2009
2009 december 31. 19:17:03[...] de valahogyan csak kiadja a heti egyet. Két bejegyzés lépte át a 10.000 olvasást, mégpedig az URL átírások, Apache mod-rewrite és a Trackback, pingback megatöbbi, sőt egy harmadik (mégpedig pont az ami rólam szól, az [...]
-
Csaba
2010 március 7. 00:44:28Szia!
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] -
rrd
2010 március 8. 11:31:06@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.
-
Csaba
2010 március 8. 16:46:02Köszönöm, megoldottam.
-
Alex
2010 április 18. 19:01:07Szia!
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!
-
rrd
2010 április 19. 16:14:19@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.
-
Alex
2010 április 21. 20:06:02Kö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!
-
Pityu
2010 május 16. 12:35:06Sziasztok!
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:) -
rrd
2010 május 17. 10:32:31@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
2010 május 17. 14:45:58Ü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 -
rrd
2010 május 17. 15:21:55@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. -
Pityu
2010 május 17. 15:47:23Ü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 -
rrd
2010 május 17. 16:45:05@Pityu Nagyjából valami ilyesminek kell lennie. Mi a gond vele?
-
Pityu
2010 május 17. 16:55:52Ü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:/ -
rrd
2010 május 17. 17:06:28@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. -
Imre
2010 május 18. 14:24:01Szia!
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} !-dRewriteRule \.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 -
rrd
2010 május 19. 11:12:37@Imre szerintem nem kell a QSA. Ha ez nem segít akkor a weblabor.hu fórumán folytassuk
-
Tamás
2010 május 30. 08:21:38Szia!
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=anonymousElőre is köszi,
üdv.: Cs. Tamás -
Tamás
2010 május 30. 09:01:25Elő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/
-
Roland28
2010 június 21. 22:42:38Szia(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!?
NEM TUDOM ELTÜNTETNI EZT:(
(A MENÜK IS CSÚNYÁK)EZT SZERETNÉM LÁTNI HA KATTINTOK…
Lécci segítsetek mert kezdem unni!!Üdv.
-
rrd
2010 június 22. 08:29:38@Roland28 Megy egyáltalán a rewrite modul? Először azt kellene ellenőrizni.
-
Roland28
2010 június 22. 09:12:29Persze 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!! -
rrd
2010 június 22. 09:32:07@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.
-
Roland28
2010 június 23. 15:27:56Köszi! Átolvastam többször…
De nem vezet megoldásra:(
Ugyanez van nekem is!!
(a leírás szerint) -
Feru
2010 augusztus 16. 17:31:19Szia!
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} !-dRewriteRule ^cegunkrol(.*)$ index.php?page=menu&id=$1 [L]
erre kérnék egy kis segítséget, előre is köszönöm
-
rrd
2010 augusztus 17. 09:01:00@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
-
Feru
2010 augusztus 18. 08:35:31rrd már csak annyi a bajom, hogy nem tudom milyen kódot kellene a php-ba beletennem
-
rrd
2010 augusztus 18. 11:13:48@Feru a PHP-ba? Oda semmit.




