Autor Zpráva
RaDim
Profil
Trochu nechápu, jak to RewriteRule funguje.

.htaccess:
RewriteEngine on
RewriteRule ^(.*)(graphics/)(.+)(\.png|\.gif|\.jpeg|\.jpg|\.jp2|\.bmp)$ graphics/$3$4
RewriteRule ^(.*)$ index.php?url=$1 [QSA]

zadám:
http://localhost/a/b/c/graphics/error-message-background.jpg

a v indexu mám toto:
Array ( [url] => graphics/error-message-background.jpg/b/c/graphics/error-message-backg round.jpg  )

Pochopil bych, kdyby to vrátilo jenom "graphics/error-message-background.jpg", protože bych si myslel, že se prostě podle regulárního výrazu vyseparuje "error-message-background" jako $3 a ".jpg" jako $4 a takto upravená url se dá na zpracování pro to druhý RewriteRule a to to celý narve za index jako proměnnou url. Ale proč to dělá zrovna toto nechápu.

(neřešte to, že tady tento případ nemá asi moc uplatnění - snažím se vyrobit něco většího - toto je jenom část)
RaDim
Profil
Nebo jsem zkoušel toto:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(/abc/)$ [NC]
RewriteRule ^(.*)$ index.php?ok=ok [L,QSA]
RewriteRule ^(.*)$ index.php?nok=nok [QSA]

Podle toho co jsem kde čet, tak příznak L znamená to, že se RewriteRule, které ho má, provede jako poslední. Takže v tomto případě, pokud bude platit podmínka, že jsem v adresáři "abc", tak dostanu "ok=ok" a mame tu příznak L, takže se "nok=nok" neprovede. Jenomže když v tom adresáři nejsem, tak dostanu toto:
array(1) {
  ["nok"] => string(3) "nok"
}

A když jsem tak toto:
array(2) {
  ["nok"] => string(3) "nok"
  ["ok"] => string(2) "ok"
}

Podstrčil se nejdřív index.php?ok=ok a potom index.php?nok=nok plus všechny proměnné (QSA), takže jsem nakonec dostal obě proměnné. Takhle teda příznak L asi nefunguje nebo nevím. Může někdo poradit?
Davex
Profil
První RewriteRule se vyhodnocuje na základě platnosti podmínky v RewriteCond, příznak [L] ukončuje rozsah podmínky a začíná se tedy znovu. Druhé RewriteRule už žádnou podmínku nemá, takže se provede vždy.
RaDim
Profil
Když je to tak, tak by něměl podle mě fungovat tento příklad http://interval.cz/clanky/mod-rewrite-pro-hezka-url-rewritecond/#inner -links-ruzne-verze-prohlizecu-ruzne-stranky

A další věc - jde teda udělat něco jako "když to bude odpovídat jednomu regulárnímu výrazu, tak se udělá nějaké RewriteRule, když ne a bude odpovídat jinému tak druhé RewriteRule a ve všech ostatních případech třetí RewriteRule"?
A taky to co jsem psal poprvé, tak to taky moc nechápu.

Ještě jsem se chtěl zeptat - když poutiju příznak L, tak to znamená, že když výraz odpovídá regulárnímu výrazu v RewriteRule, tak se provede jenom to jedno podstrčení a další už ne. A když to neodpovídá tomu regulárnímu výrazu, tak se provede následující RewriteRule i když v tom prvním je L? Nebo jak?

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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