PDA

Pogčedajte punu verziju : mod_rewrite: if directory exists... else...


BrainDamage
27. 10. 2008., 16:07
DakleM: ako postoji određeni podfolder, važi jedno pravilo. Ako ne postoji, treba da važi drugo. Evo kako sam to ja zamislio:

# ima
RewriteCond ^folder/(.*)/?$ [NC]
RewriteCond ^folder/$1/ -d
RewriteRule ^folder/(.*)/(.*)$ folder/$1/neki_drugi_folder/$2 [L]

# !ima
RewriteCond ^folder/(.*)/?$ [NC]
RewriteCond ^folder/$1/ !-d
RewriteRule ^folder/(.*)/?$ http://www.google.com [R=301,L]

Google.com je pro forme, čisto da znam da radi. Al' neće da radi... đe sam zabrljo?

BrainDamage
29. 10. 2008., 21:41
Uh, zaboravio sam da napomenem da prvi blok radi, dok drugi kao da ne postoji.

ivanhoe
29. 10. 2008., 23:18
ne trebaju ti RewriteCond za drugi blok, ako je prvi ispunjen nikad nece ni stici do drugog (imas [L] flag)

a i ovaj prvi RewriteCond ti je potpuno nepotreban, jer je isti kao uslov u RewriteRule (ako rule nije ispunjen condition se ni ne proverava, pa je zato nepotreban), a i $1 se odnosi na podatke u zagradi u RewriteRule, za podatke iz RewriteCond se koristi %1

Eh, da, i pogresno koristis proveru -d, moras da mu das file path, a ne url, znaci treba:

RewriteCond /home/pera/www/folder/$1/ -d

obicno se to pise preko ugradjene promenjive:
RewriteCond %{REQUEST_FILENAME} -d

BrainDamage
30. 10. 2008., 02:35
Nisam znao za %1... noob :)

Rijesio sam stvar na drugi nacin odmah nakon slanja druge poruke, al' samo rjesenje nema veze s primjerom koji sam dao (inace, prepravljeno na osnovu nekog hint-a koji sam nasao na netu; opet se pokazalo da je najbolje kad sam rijesis problem).

Moze topic u trash, sama postavka problema je bila pogresna.