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 28,229 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!
224 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.
-
rolx
2010 november 12. 17:36:01Hello!
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! -
pLa
2010 december 19. 02:39:39Szia!
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. -
rrd
2010 december 19. 12:44:43@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.
-
pLa
2010 december 21. 18:38:29@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
-
rrd
2010 december 21. 19:46:58@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. -
pLa
2010 december 22. 13:04:23@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
-
Trianta
2011 január 3. 14:06:24Szia!
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] -
rrd
2011 január 3. 15:16:57@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.
-
Trianta
2011 január 3. 17:29:26Aha, 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] -
fish
2011 január 10. 23:02:46Szia!
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! -
rrd
2011 január 11. 11:04:04@fish Ez inkább valami apache beállítás probléma lesz. Fordulj az üzemeltetőhöz.
-
Ati
2011 január 28. 11:16:16Szia!
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! -
rrd
2011 január 28. 11:58:46@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. -
Viking
2011 március 6. 16:07:36Ü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/tipusvaló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=$2Annyi 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
-
rrroka
2011 március 23. 09:34:43Nekem 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 -
rrd
2011 március 23. 11:29:47@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…
-
rrroka
2011 március 29. 07:28:28@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. -
rrd
2011 március 30. 11:54:12@rroka a cond a rule elé kell. Nem ugorhatja át. Hogy néz ki a teljes .htaccessed?
-
Pisti
2011 március 31. 14:21:58Kedves 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!
-
Brown ügynök
2011 április 1. 10:09:53Üdv!
Éppen írni akartam amikor sikerült megoldani. Kösz a cikket!
-
rrroka
2011 április 4. 14:57:52@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. -
rrd
2011 április 4. 15:31:16@rroka Igen, pontosan ez ELÉ a RewriteRule elé kell ez:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-dVagyis 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.
-
nagyi
2011 április 5. 10:10:50Hello, 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.htmlEddig 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! -
rrd
2011 április 5. 10:57:20@nagyi talán ha a ^akarmi-nál lehagynád a ^ jelet…
-
nagyi
2011 április 5. 13:08:39@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! -
rrd
2011 április 5. 14:06:24@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.
-
rrroka
2011 április 5. 15:15:56@rdd: kipróbálom, köszi!
-
nagyi
2011 április 7. 07:08:25@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.
-
krabat
2011 április 8. 13:07:16Szia rrd!
Adott egy adatbázis, és ilyen urleket eredményez:
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 gondoltamRewriteRule (elotteakarmi) mire/ (utanaakarmi) mit [??QSA]
-
rrd
2011 április 8. 13:31:10@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.
-
toldigabor
2011 május 12. 10:15:49Szeretné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.
-
Toldi Gábor
2011 május 13. 06:40:14Mié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-cimeEzt í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] -
rrd
2011 május 13. 10:25:47@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]
-
Toldi Gábor
2011 május 14. 17:23:57A 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? -
rrd
2011 május 15. 10:59:52@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.
-
gabikah
2011 július 9. 18:21:24Szia.
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 -
Sztanka
2011 augusztus 18. 20:01:34Kedves 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 /adminRewriteRule ^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.



