ugrás a tartalomhoz

Default RewriteRule

darklight9 · 2009. Szep. 17. (Cs), 18.20
Helló, van egy félig működő kódom. Amit el akarok érni, hogy az előre beállított oldalak elérhetőek legyenek (ez OK), de azon kívül ugorjon egy standard oldalra (evvel van probléma). A következő kód az utolsó (problémás) sor elrejtése miatt működik:

RewriteBase /

Options +FollowSymLinks
RewriteEngine on

#ErrorDocument 403 /stand/stand/stand
#ErrorDocument 404 /stand/stand/stand

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

RewriteRule ^script/(.*)/?$ /script/$1 [L]
RewriteRule ^style/(.*)/?$  /style/$1 [L]

RewriteRule ^admin/?$       /admin.php [L]
RewriteRule ^admin/(.+)/?$  /admin.php?p=$1 [L]

RewriteRule ^([^/]*)/([^/]*)/([^/]*)/?$   /index.php?l=$1&t=$2&p=$3 [L]


#RewriteRule ^.*$           /stand/stand/stand [R,L]


Ha kiveszem a kommentet, "átirányítási hurok" jelzést kapok FireFox-tól, ha az Redirect R-jét is kiveszem (tehát csak [L] -t hagyok), akkor meg Internal Server Error-t kapok Apache-tól.

Kérlek, segítsetek megoldani a problémát, már ez a 4. fórum ahova írok, mert eddig napok óta nem kaptam választ az előző fórumokról (gondolom nem kompetensek), és fontos lenne, hogy megoldódjon!

Előre is Köszönöm a Válaszokat!!!
Üdv, DarkLight
 
1

olvasd el ezt:

rrd · 2009. Szep. 17. (Cs), 19.05
2

OK, megvolt

darklight9 · 2009. Szep. 17. (Cs), 20.34
Tök ugyanebből táplálkoztam, a fenti dolgokat ezek alapján magamtól írtam. Nekem egy hiba van benne, és másik nagy infós barátommal nem tudtunk rájönni a hiba okára, helyére. Azért jöttem erre a fórumra, hogy erre választ kapjak. Egy tök egyszerű rész, és mindent elront, mégis nélkülözhetetlen:

RewriteRule ^.*$ /stand/stand/stand [R,L]

RewriteRule, azaz evvel írom át az URL-t
^...$, azaz a kezdettől a végéig
.*, azaz bármilyen szöveg lehet //tehát ha eddig valamit átírt, azért a fenti soroknál [L] miatt megáll. Ez pedig minden esetben teljesülni fog.
/stand/stand/stand, azaz erre a helyre irányítja át
[R,L], azaz nem csak simán átírja, hanem kéri a klienst, hogy igenis, kérje le még egyszer, így, helyesen ( [R] ), és ezek után ne nézzen mást ( [L] ).

Eddig OK, ez a Joker. De honnan tudjam, hogy /stand/stand/stand -ot feldolgozza-e valami? A következőbe fog beleakadni:

RewriteRule ^([^/]*)/([^/]*)/([^/]*)/?$ /index.php?l=$1&t=$2&p=$3 [L]

RewriteRule, ismét átírom
^...$, megint mindent nézek
(...), azaz az itt levő kifejezésre $1 és $9 között tudok hivatkozni, sorrendtől függ a szám
[^/]*, azaz minden karaktert felismer, kivéve a / jelet, azaz a szöveg kezdetétől / jelig bármi lehet, erre tudok hivatkozni $1-gyel
/([^/]*)/, azaz a következő, $2 tartalom a / jeltől levő / jelig tart
([^/]*), ez lesz az utolsó vagy utolsó előtti / jel utáni tartalom, ami $3 lesz
/?, azaz a végén vagy van /, vagy nincs, ezért volt az a bizonytalanság az előző sorban.

Nem akarom tovább sorolni, egyértelműen át lesz írva index.php?l=stand&t=stand&p=stand -ra, de ez a # miatti rejtés miatt be is bizonyosodott, mert így bejön ez az oldal, és a stand, azaz standard értékeket ez a php szkript feldolgozza, és egyébként javascript segítségével átirányítással javítja.

Tehát én nem találom benne a hibát, de valahol mégis ott van. A kérdés, hogy hol. Tudom, vannak olyanok, akik kis kutakodás után feladják, és úgy jönnek ide, de asszem most bizonyítottam, hogy nem ide tartozok, úgyhogy légyszíves, normálisan válaszolj, próbáljuk meg együtt megfejteni a hiba okát, mert én ehhez egyedül kevés vagyok, nem értem, miért kapok hibajelzést, ilyen eset még soha nem fordult velem elő.

Továbbra is várom válaszotokat a problémával kapcsolatosan.
Üdv, DarkLight
3

Ha jól értem, akkor azt

rrd · 2009. Szep. 18. (P), 13.40
Ha jól értem, akkor azt szeretnéd elérni, hogy ha az url nem http://akarmi.hu/egyik/masik/harmadik alakú, akkor minden ilyen lekérés a http://akarmi.hu/stand/stand/stand-ra legyen irányítva.

Az R flag felesleges ezt tényleges külső átirányítás során szoktuk használni, azaz ha másik domainra dobod a látogatót.

Az L-nél azért kapsz 500-as hibát mert a stand/stand/stand útvonal ténylegesen nem létezik, azaz a szerver nem tudja kiszolgálni.

Szerintem neked az utolsó sorként valami ilyesmi kellene:
RewriteRule ^.*$ index.php?l=stand&t=stand&p=stand [L]

Mivel nem egészen értem, hogy valójában pontosan mire is van szükséged nem biztos, hogy ez véglegesen megoldja a problémádat. Mindenesetre próbáld még egyszer elolvasni a fenti cikket és megérteni a logikáját. Ha az megvan onnantól kezdve már nyert ügyed van, habár ez bizony woodoo :)
4

Helló, még egyszer átnéztem,

darklight9 · 2009. Szep. 18. (P), 23.33
Helló, még egyszer átnéztem, amikor írtad, hogy nézzem át még egyszer. Láttam a QSA-t, és eszembe jutott, hogy láttam olyan kódot, amiben használták, így lett ez:

RewriteRule ^.*$ z/index.php?l=stand&t=stand&p=stand [L,QSA]

Így működik (QSA nélkül, ahogy írtad, sajna nem), de az admin oldalt nem adja be, hanem azt is átírja... Mivel nem igazán értem, hogy a magyar szöveg mit akar kifejezni, így kicsit belemélyedek az angol eredetibe is.

Ha továbbjutok a megoldásban, azt leírom ide, hogy másnak is segítsen, ha ugyanez a probléma merülne fel nála.

Köszi a segítséget, rrd! Már kezdtem feladni, bár most sem tuti... Kicsit olyannak tűnik, mintha az [L]-ek ellenére továbbmenne, és átírná a default oldalra, amikor én az admint kérem... =(
5

Jah, igen, és ez a sor

darklight9 · 2009. Szep. 18. (P), 23.52
Jah, igen, és ez a sor rendesen működik:
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/?$ z/index.php?l=$1&t=$2&p=$3 [S=9]

Úgyhogy egyre kevésbé tudom, hogy most mi is történik itten...
6

A magam részéről azt a

rrd · 2009. Szep. 19. (Szo), 13.30
A magam részéről azt a megoldást preferálom, hogy a .htaccess-ben csak annyi van, hogy ha nem létező file vagy könyvtár kerül meghívásra akkor adja át az index.php-nak paraméterként az url-t és oldja meg a php a hibakezelést, admin kezelést és minden mást. Máskülönben könnyen bele lehet kavarodni a sokféle szabályba.