ugrás a tartalomhoz

RewriteCond és Rule paraméter segítség

unregistered · 2012. Jún. 4. (H), 15.29
Sziasztok!

Előre szólok hogy MŰKÖDIK csak nem tudom miért :)
Valaki magyarázza el nekem hogy a RewriteCond hogyan alkalmazható mert én nem értem :(

Leírás:
Van a domainem.hu, itt ugye megnyílik az index.php.
Ha a page változó kapott értéket akkor az a php oldal töltődik be, ha nem akkor a fooldal.php

Az oldalon "dinamikus" url-nél így néznek ki a varriációk:

domain.hu/index.php?page=fooldal
domain.hu/index.php?page=elso&param1=1
domain.hu/index.php?page=$1&param1=$2&param2=$3&mappa=$4&kep=$5

Van admin oldal is az a domainem.hu/admin (itt ugye az admin mappában lévő index.php nyílik meg)

Itt a htaccess is:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9-]+)$ index.php?page=$1 [NC,L]
RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)$ index.php?page=$1&param1=$2&param2=$3&mappa=$4&kep=$5 [NC,L]
</IfModule>


A problémám:

1. Van az első kettő RewriteCond itt ugye azt ellenőrizzük hogy a page változó értékének nevével létezik-e file vagy mappa?
1b. Honnan tudja hogy a page-t kell ellenőrizni és nem a param1-et?
1c. Ha van mappa vagy file akkor mi történik? Semmi? Hol az "else" ág?
1d. Ha nem létezik akkor lefutnak a rule-ok.
2. Ha teljesül az első Rule akkor az, ha nem akkor a második, itt rögötön jön a kérdés, hogy kötelező-e az "L" paraméter és ha igen, miért?

3. Lehet-e "ágaztatni" a RewriteCond-okat? Pl (csak példaként):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule blablabla
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule blablabla
# továbbra sem tudom hogy van az "else" ág


4. Ha a legelső htaccess-t veszem alapul akkor ha olyat kap hogy oldalam.hu/admin kell-e lekezelni, vagy mivel van ilyen mappa bedob automatikusan a mappába?

Előre is köszönöm a fejtágítást!
 
1

Ha egymás alá raksz két

inf · 2012. Jún. 4. (H), 16.11
Ha egymás alá raksz két rewritecond-ot, akkor képzelj oda egy AND-et is közéjük, egyébként meg ha az egyik után raksz egy [OR]-t, akkor egy OR-t. A rewritecond mindig az utána jövő rule-ra vonatkozik. Szóval ha teljesül a feltétel, ami benne van, akkor lefut a rule. Persze a rule-k egymás után is lefutnak, attól függően, hogy hol vannak jelen. Ha conf fájlban, akkor az L flaggel jelölteknél kilép a feldolgozó, ha viszont htaccess fájlban, akkor az L flag nincs hatással, és a következő rule is lefut. Else ág nincs mod rewrite-ban.

A kódod azt csinálja, hogy megnézi, hogy az uri, ami nem tartalmaz /-t az nem fájlra vonatkozik, és nem is könyvtárra, ha ez stimmel, akkor átadja a kérést az index.php-nek, ami hozzácsapja a page-t. Ha viszont van benne x db / jel, akkor szintén átadja az index.php-nek, csak paraméterekkel. Ellenkező esetben ha a fájl / könyvtár létezik, akkor azt adja vissza, ha nem, akkor a 404-es lapot.
2

Világosodom :)

unregistered · 2012. Jún. 4. (H), 18.13
0. Köszönöm az eddigieket ;)
1. Tehát a htaccess-ban csak az L flag-nek nincs hatása, vagy egyiknek sincs?
2. Van jelentősége az üres sorközöknek akár a rule-oknál akár a cond-oknál vagy csak átláthatósági tagolásra szolgálnak?
3. A rule-oknak htaccesben (hogy nincs hatással az L flag) van értelme a különböző sorba rendezésnek hogy melyik, melyik előtt, vagy után van a sorban?
4. Most akkor le kell kezelnem azt ha egy mappába akarok belépni pl domainem.hu/mappanev (és így megjeleníteni az ott található index file-t) vagy ezt az oldja meg hogy létezik ilyen mappa ezért a további roule-ok nem futnak le
5. Ha nem teljesül egy cond akkor az utána jövő egyik rule sem fut le vagy csak a közvetlen azután jövő?
6. a htaccess-ben megadott rule-ok csak a gyökérben érvényesülnek vagy automatikusan midnen egyébb mappában is? (erre való a "RewriteBase /" ?)
7. most a head-ben nincs base tag (<base href="<?php print $host.$base ?>" />), ez végül kell vagy mi van ezzel? Néhol azt írják kell néhol hogy nem...
3

7. most a head-ben nincs base

Poetro · 2012. Jún. 4. (H), 19.43
7. most a head-ben nincs base tag (<base href="<?php print $host.$base ?>" />), ez végül kell vagy mi van ezzel? Néhol azt írják kell néhol hogy nem...

Az a relatív URL-eket befolyásolja. Azaz ha a base http://example.com/app/docs/ akkor az <a href="mydoc.html">My Document</a> mint <a href="http://example.com/app/docs/mydoc.html">My Document</a> lesz értelmezve.