Autor Zpráva
Camo
Profil
Vitajte!

Mám takýto zápis, ktorý funguje:
RewriteEngine on
RewriteBase /
RewriteRule (x*)x$ rewMod.php?item=$1 [L,NC]
V súbore rewMod.php vypisujem GET premennú, ktorú mi má mod rewrite nastaviť.
Ak teda zadám adresu domena.sk/xxx tak to prepíše na domena.sk/rewMod.php?item=xx

A ja potrebujem vedieť, prečo keď RewriteRule prepíšem na:
RewriteRule (x*)$ rewMod.php?item=$1 [L,NC]
tak to síce podstrčí ten súbor rewMod.php. ale tie x-ká mi to nevypíše.
Nedáva mi to logiku:(

Ak mi to vie niekto vysvetliť, tak vopred ďakujem...
Kajman
Profil
Pak projde cokoliv i s prázdnou závorkou. Zkuste ^(x*)$
Camo
Profil
Kajman:
Pak projde cokoliv i s prázdnou závorkou.
Zatiaľ sa to len učím, takže je jedno čo prejde.
Problém je v tom, že to má prepísať adresu na rewMod.php?item=$1
A malo by to zachytiť všetko, čo sa končí na x.
No a ono mi to síce podstrčí súbor rewMod.php, ale keď v tom súbore dám vypísať echo $_GET["item"] tak tam tie x-ká nie sú. A podľa mňa by tam mali byť. A ako som napísal, že keď to dám takto: (x*)x$ tak to funguje správne. Nechápem čo sa to tam deje...

EDIT:
Ale ^(x*)$ funguje správne ako pozerám. Len pochopiť by som to ešte potreboval...
Petr ZZZ
Profil
Reaguji na Cama:
Len pochopiť by som to ešte potreboval...

Chápu-li vysvětlení na stránce o regulárech správně, potom ^ a $ vyznačuje začátek a konec hledaného řetězce, kulaté závorky zajistí opakování, x je x a hvězdička reprezentuje libovolný znak. Takže to hledá libovolný počet znaků x bez ohledu na opakování a na to, co za tím x následuje.
Kajman
Profil
Reguláry v mod_rewrite by měly být žravé (greedy), tak by měla hvězdička uzmout co nejvíc, co to jde, ale možná předtím uzme co nejvíc volná podmínka. Je možné, že to funguje trošku podivně. Jistější je napsat regulár tak, aby fungoval stejně při líném i žravém vyhodnocování.

Pro podrobnější pochopení zpracování rewrite pravidel může pomoci zapnutí rewrite logu.
Camo
Profil
Kajman:
Reguláry v mod_rewrite by měly být žravé (greedy), tak by měla hvězdička uzmout co nejvíc, co to jde
Presne o to ide. A to je to čo nedáva zmysel. Lebo keď je to iba (x*)$ tak to vyzerá, že sa hľadá najkratší možný reťazec v tomto prípade prázdny.
Ale keď napíšem (x*)x$ tak sa to naopak chová tak, že hľadá najdlhší možný reťazec teda že toľko x koľko tam napíšem, toľko aj dostanem.

Ten rewriteLog sa mi nepodarilo rozchodiť... ale nemyslím, že by niečo zachytil, lebo to vyzerá ako korektné chovanie, len to asi nechápem...

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: