Pogčedajte punu verziju : .htaccess problem
Blood
09. 10. 2006., 19:21
Ovo verovatno ne ide u php, ali ne znam gde drugde da ga stavim, neka moderatori prebace temu gde misle da treba da ide(samo ne u djubre :p)
Evo kratak opis problema, pravim neku scriptu koja treba da bude seo friendly. To sam resio preko .htaccess fajla, evo kako on ozgleda:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+[^/])$ $1/ [R,L]
RewriteRule ^login(.*)/$ /login.php [L]
RewriteRule ^admin/(.*)/$ /admin.php?act=$1 [L]
RewriteRule ^(.*)/$ /index.php?act=$1 [L]
i on radi super, problem nastaje kad se scripta ne nalazi u root-u, vec u nekom subdir-u.
Ja uzmem i prepravim kod da izgleda ovako:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^script/(.+[^/])$ $1/ [R,L]
RewriteRule ^script/login(.*)/$ /login.php [L]
RewriteRule ^script/admin/(.*)/$ /admin.php?act=$1 [L]
RewriteRule ^script/(.*)/$ /index.php?act=$1 [L]
medjutim to ne radi(naravno .htaccess file uploadujem u root/script/ dir), dobijem error 404 za npr http://root/script/test/ dok u lokalu radi savrseno
Da li neko zna gde gresim?
Hvala!
LiquidBrain
09. 10. 2006., 19:54
Lupam sada, ali mozda je problem u
RewriteBase /
probaj sa
RewriteBase /script/
Mozda ima nekog smisla :) A ipak mozda i nema...
oliver
09. 10. 2006., 19:58
ja sam TOTALNI laik za .htaccess, ali, zar ne bi trebalo da u drugom slucaju RewriteBase bude "/script" a ne "/", a RewriteRule-ovi ostaju nepromijeneni, tj:
RewriteBase /script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+[^/])$ $1/ [R,L]
RewriteRule ^login(.*)/$ /login.php [L]
RewriteRule ^admin/(.*)/$ /admin.php?act=$1 [L]
RewriteRule ^(.*)/$ /index.php?act=$1 [L]
unaprijed se izvinjavam ako sam lupio :)
edit prestize me LiquidBrain :)
Petar Marić
09. 10. 2006., 20:03
Probaj:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^login/$ ./login.php [L]
RewriteRule ^admin/(.*)/$ ./admin.php?act=$1 [L]
RewriteRule ^(.*)/$ ./index.php?act=$1 [L]
</IfModule>
Sada bi trebalo da radi nezavisno od toga u koji dir ga strpas (nešto slično tome koristim za moj Django (http://www.djangoproject.com/) setup na DreamHost (http://www.dreamhost.com/r.cgi?122188)-u).
Blood
09. 10. 2006., 20:08
Probao sam i to, ali nije uspelo... :(
Mislim, ne prijavljuje mi 404 vec me baca na http://root/index.php
a probao sam onda i da mu stavim ovako
RewriteEngine On
RewriteBase /script/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^script/(.+[^/])$ $1/ [R,L]
RewriteRule ^script/login(.*)/$ /login.php [L]
RewriteRule ^script/admin/(.*)/$ /admin.php?act=$1 [L]
RewriteRule ^script/(.*)/$ /index.php?act=$1 [L]
A onda sam opet poceo da dobijam 404
Petar Marić
09. 10. 2006., 21:07
Ajd daj malo detaljnije informacije o podešavanjima:
* ime servera
* lokacija web root-a na disku
* relevantnu Virtual Host sekciju - ako postoji
* relativnu putanju do skripti u odnosu na web root na disku
* relativnu putanju do skripti u odnosu na web root za http
* putanje koje pokušavaš da dobiješ
* putanje koje dobijaš, ili grešku ako nju dobijaš
* relativnu putanju do .htaccess fajla u odnosu na web root na disku
I ako nije problem pošalji to za .htaccess koji sam ti dao, da ne analiziram druge.
dejanr
09. 10. 2006., 21:35
Probaj sa:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
...
A evo i http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html pa kreni redom ...
ivanhoe
09. 10. 2006., 21:41
Ako stavis RewriteBase da ti je script, onda ti ne treba script/ u prvom parametru, jer se to automatski skida. U principu j RewriteBase bitan samo kad se koristi i mod_alias da bi Apache umeo da se snadje gde s sta nalazi, ovako kako ti radis mozes slobodno da ostavis kao u prvom primeru i da onda rewrite-ujes celu putanju.
Dakle, nesto ovako:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^script/(.+) /$1 [R,L]
RewriteRule ^script/login(.*) /login.php [L]
RewriteRule ^script/admin/(.*)/? /admin.php?act=$1 [L]
RewriteRule ^script/(.*)/? /index.php?act=$1 [L]
Ovo bi moralo da sljaka, mada nisam probao... ako ne bude radilo, probaj da izmenis flagove da budu [R,L] tako da se uradi externi redirect, tako ces da vidis koju adresu on pokusava da dohvati, pa ce ti biti jasno gde je problem..
Ako isprobavas ovo u localu (ili imas pristup httpd.conf na serveru) onda je najbolje da dodas u definiciju virtuelnog hosta:
RewriteLog /neka/putanja/rewrite.log
RewriteLogLevel 5
log level podesi izmedju 2 i 10 na nivo detalja koji ti treba (petica je po meni sasvim dovoljna), pa onda lepo u njemu pogledaj sta se desava korak po korak...
srdjevic
09. 10. 2006., 22:52
Ili mozes da SVE prebacujes na index.php, a da ti on bude switch. Onda u njemu pogledas path koji je trazen, pa mozes da odradis i header(location), a i include. ;-)
Blood
10. 10. 2006., 12:18
Hvala Vam svima na odgovorima, evo kako sam resio problem.
RewriteEngine On
RewriteBase /script/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+[^/])$ $1/ [R,L]
RewriteRule ^login(.*)/$ /script/login.php [L]
RewriteRule ^admin/(.*)/$ /script/admin.php?act=$1 [L]
RewriteRule ^(.*)/$ /script/index.php?act=$1 [L]
Kazu da je jutro pametnije od noci...
ivanhoe
10. 10. 2006., 13:25
postoji problem sa ovim pravilom: RewriteRule ^(.+[^/])$ $1/ [R,L]
Sta ako neko otkuca www.bla.com/script/nesto, bice preusmeren na www.bla.com/nesto, a ne na /script/index.php?act=nesto, odnosno vrlo je diskutabilno kad ce to pravilo reagovati, a kad onaj catch-all na kraju, jer ljudi ponekad kucaju / na kraju urla, a ponekad ne... ocekuje se da je www.bla.com/bla i www.bla.com/bla/ ista stvar, a tebi zbog ovog rewrite-a nije tako...
ako je ideja da tim pravilom uhvatis samo fajlove onda ti je bolje da insistiras na postojanju extenzije na kraju, nego na tome da fali /
Blood
10. 10. 2006., 13:41
postoji problem sa ovim pravilom: RewriteRule ^(.+[^/])$ $1/ [R,L]
Sta ako neko otkuca www.bla.com/script/nesto, bice preusmeren na www.bla.com/nesto, a ne na /script/index.php?act=nesto, odnosno vrlo je diskutabilno kad ce to pravilo reagovati, a kad onaj catch-all na kraju, jer ljudi ponekad kucaju / na kraju urla, a ponekad ne... ocekuje se da je www.bla.com/bla i www.bla.com/bla/ ista stvar, a tebi zbog ovog rewrite-a nije tako...
Tim pravilom sam hteo da postignem bas to da www.bla.com/script/nesto bude isto sto i www.bla.com/script/nesto/ tj to pravilo treba da dodaje / na svaku url koji nema na kraju /
vBulletin® v3.6.8, Copyright ©2000-2024, Jelsoft Enterprises Ltd.