mod_rewrite problem s RewriteCond

Programovacie jazyky, rady, poradňa...
Skyer
Light Star
Light Star
Príspevky: 231
Registrovaný: 30 mar 2010, 15:41
Bydlisko: Bratislava

mod_rewrite problem s RewriteCond

Príspevok od používateľa Skyer »

Ahojte,
v poslednej dobe som sa zacal pohravat s mod_rewrite, a jeho direktivami. Na web skusam urobit featurku,
ktora konkretnu URL transparentne redirectne na query_string, a zaroven, v pripade ze sa niekto pokusi prist na web
cez konkretny query string, bude presmerovany na index. Tj:

Presmerovanie kanonickej URL transparentne pre uzivatela:

Kód: Vybrať všetko

/settings -> page.php?id=3
V pripade, ze niekto skusit zadat id explicitne:

Kód: Vybrať všetko

page.php?id=4 -> index.php
Moj kod mi (neprekvapujuco) nefunguje:

Kód: Vybrať všetko

RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} id=[0-9]+
RewriteRule [a-z0-9]+ index.php?q=redirected_by_condition [NC,R]

RewriteRule ^userstats$ index.php?id=2 [L]
Chyba spociva v tom, ze aj pri "userstats" nakoniec skoncim presmerovany prvym pravidlom. (t.j na index.php?q=redirected_by_condition).

Nevedel by mi nahodou niekto povedat, kde mam chybu? resp. preco to nefunguje?

Dakujem.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: mod_rewrite problem s RewriteCond

Príspevok od používateľa audiotrack »

prehoď poradie posledných dvoch riadkov
Skyer
Light Star
Light Star
Príspevky: 231
Registrovaný: 30 mar 2010, 15:41
Bydlisko: Bratislava

Re: mod_rewrite problem s RewriteCond

Príspevok od používateľa Skyer »

Hmm, to mi dava

Kód: Vybrať všetko

"Firefox has detected that the server is redirecting the request for this address in a way that will never complete."
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: mod_rewrite problem s RewriteCond

Príspevok od používateľa audiotrack »

a ešte za RewriteCond %{QUERY_STRING} id=[0-9]+ daj RewriteCond %{REQUEST_FILENAME} !index.php
Skyer
Light Star
Light Star
Príspevky: 231
Registrovaný: 30 mar 2010, 15:41
Bydlisko: Bratislava

Re: mod_rewrite problem s RewriteCond

Príspevok od používateľa Skyer »

Diky za odpoveď, stále je to

Kód: Vybrať všetko

"Firefox has detected that the server is redirecting the request for this address in a way that will never complete."
.

Ja ale akosi nechapem, preco ten prvy kod nefunguje: Ak je v query string "id=" a nejake cislo, bude presmerovanie na index. Ak nie, tak ak tam je userstats, tak bude presmerovanie na index.php?id=2, ale to prve pravidlo sa uz nebude vykonavat. Cize URL by malo ostat v tvare index.php?id=2. Cital som viac tutorialov, no toto mi nejak nejde...
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: mod_rewrite problem s RewriteCond

Príspevok od používateľa audiotrack »

nefunguje ti to preto, lebo výrazu [a-z0-9]+ vyhovuje aj reťazec 'userstats', preto sa spracuje ako tento prvý príkaz a na druhý sa už nedostane.
Skyer
Light Star
Light Star
Príspevky: 231
Registrovaný: 30 mar 2010, 15:41
Bydlisko: Bratislava

Re: mod_rewrite problem s RewriteCond

Príspevok od používateľa Skyer »

Nemal by byť ale ten prvý podmienený tým id=[0-9]+ v query string?

edit: a ďakujem za rýchle odpovede
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: mod_rewrite problem s RewriteCond

Príspevok od používateľa audiotrack »

nie
Skyer
Light Star
Light Star
Príspevky: 231
Registrovaný: 30 mar 2010, 15:41
Bydlisko: Bratislava

Re: mod_rewrite problem s RewriteCond

Príspevok od používateľa Skyer »

To je divne, podla toho co som cital je exekucia pravidla za podmienkou podmienena tym, ci je samotna podmienka platna. Teda sa aspon dostavame k jadru problemu...

Kód: Vybrať všetko

RewriteCond --
RewriteRule -- #ak je podmienka neplatna, pravidlo nie je aplikovane
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: mod_rewrite problem s RewriteCond

Príspevok od používateľa audiotrack »

dobre, keď sa na to takto pozeráš, tak hej. Keď sa na to pozreš komplexne ako to funguje, tak to funguje takto:

1) máme url /userstats
2) pozrieme sa na URI, či tam je id=[0-9]+
3) nenašlo sa, tak sa príkaz RewriteRule [a-z0-9]+ index.php?q=redirected_by_condition [NC,R] preskočí
4) vykoná sa redirect na index.php?id=2
5) server obdrží novú požiadavku (lebo tam máš redirect) a teda url je v danom momente index.php?id=2
6) zopakuje sa krok 2
7) našlo sa, presmerujeme na index.php?q=redirected_by_condition
Skyer
Light Star
Light Star
Príspevky: 231
Registrovaný: 30 mar 2010, 15:41
Bydlisko: Bratislava

Re: mod_rewrite problem s RewriteCond

Príspevok od používateľa Skyer »

Kód: Vybrať všetko

RewriteRule ^userstats$ index.php?id=2 [L]
By mal client poziadat o userstats, a vratil by sa mu index.php?id=2. Jedna sa o "redirect" v tom pravom slova zmysle aj teraz? Ja som myslel, ze ak nepouzijem flag R, tak sa na novozniknutu URL neaplikuju rewriterules znova, a klientovy sa len vrati iny obsah na prvu poziadavku. Podla vsetkeho to tak vsak nie je, takze idem urobit zopar testov na opravenie
Napísať odpoveď