[ mikis @ 18.07.2003. 05:20 ] @
Može li me neko spasiti bede kopanja po faq-ovima i dokumentaciji ;) Zašto Apache (1.3.x) ne kapira (ignoriše) RewriteRule-s kada se stave u .htaccess fajl sajta, nego samo kada se navedu u u httpd.conf? |
[ mikis @ 18.07.2003. 05:20 ] @
[ alex @ 18.07.2003. 13:41 ] @
Zato sto nisi pravilno napisao pravila u .htaccess fajlu. Provereno radi bez ikakvih problema.
Primer sadrzaja .htaccess fajla: Code: <Files "*"> RewriteEngine On RewriteRule /index.html /stuff.php </Files> [ mikis @ 20.07.2003. 03:29 ] @
Hmmm, problem je što sam "zaboravio" da u httpd.conf za taj direktorijum umesto AllowOverride: None stavim FileInfo (ili All).
Drugo, kada stavim <Files "*"> ... </Files> u .htaccess dobijam u Apache-u grešku: 400 Bad Request Your browser sent a request that this server could not understand. Međutim, šta se dešava: u httpd.conf imam sledeći RewriteRule koji savršeno radi: Code: RewriteEngine On RewriteRule ^/(.*)\.lat\.php$ /cirtolat.php [L] (umesto svakog *.lat.php otvori /cirtolat.php). E pa to isto u .htaccess ne radi :( 404 Not Found The requested URL /index.lat.php was not found on this server. Izgleda da je problem u regularnom izrazu, ali ne mogu da otkrijem gde. [ tOwk @ 20.07.2003. 03:39 ] @
Probaj da koristiš RewriteBase (vidi u uputstvu) — on upravo i služi za rešavanje tog problema sa upotrebom iz .htaccess fajla (v. kako Apači obrađuje zahteve, i zašto je to neophodno).
Uz to, preporučio bih da koristiš „/cirtolat.php/$1“ kako bi ono što ti je prepoznao (.*) dobio u promenljivoj $PATH_INFO. [ mikis @ 20.07.2003. 06:23 ] @
Citat: Probaj da koristiš RewriteBase (vidi u uputstvu) — on upravo i služi za rešavanje tog problema sa upotrebom iz .htaccess fajla (v. kako Apači obrađuje zahteve, i zašto je to neophodno). Netje :( Ali šta će mi RewriteBase kad je sve u root-u sajta? Citat: Uz to, preporučio bih da koristiš „/cirtolat.php/$1“ kako bi ono što ti je prepoznao (.*) dobio u promenljivoj $PATH_INFO. Već ga dobijam preko $_SERVER['SCRIPT_NAME'] :) [ mikis @ 20.07.2003. 07:19 ] @
Najzad rešeno... Prvo, smeta mu / na početku RewriteRule-a i zato ga preskače. Nije loše uključiti RewriteLogLevel 9 :) Drugo, i kad uklonim sleš, $_SERVER['SCRIPT_NAME'] se pobrlja pa se i moj skript pogubi... Rešenje je:
Code: RewriteEngine On RewriteRule ^(.*)\.lat\.php$ /cirtolat.php/$1 [L] i onda koristiti $PATH_INFO umesto $SCRIPT_NAME... Hvala na sugestijama! [ bOkIcA @ 20.07.2003. 23:54 ] @
Ovo lepo radi, ali da li je moguce ovako nesto:
ovako bi to bilo klasicnim nacinom http://localhost/index.php?promenjiva=5 http://localhost/promenjiva/5 (u root-u se, recimo, nalazi samo index.php) Znaci ako "/promenjiva/" direktorijum ne postoji poziva se index.php. Zna li neko kako to da resim? znaci, ne odgovara mi ovo: http://localhost/index.php/promenjiva/5 [ mikis @ 21.07.2003. 03:25 ] @
Pa može jednostavno, stavi neka se uvek poziva index.php, a onda u njemu na samom početku proveriš da li fajl već postoji i ako postoji include-uješ ga, a ako ne onda radi dalje... Ja sam to koristio u ovom mom ćirilično->latiničnom konvertoru, jer se javlja problem sa fajlovima koji u sebi imaju ostale ćirilične jezike (ruski, bugarski...). Zato takve fajlove konvertujem ručno pa ih include-ujem, a ostale konvertujem u letu. Ovako izgleda početak cirtolat.php skripta:
Code: <? $url = substr($_SERVER['PATH_INFO'],1) . ".lat.php"; if (file_exists($url)) { include ($DOCUMENT_ROOT . $_SERVER['PATH_INFO']); } else { ... A možeš rešiti i na drugi način, korišćenjem samo RewriteCond i RewriteRule. Imaš sličan primer u Apache dokumentaciji (URL Rewriting Guide): Code: RewriteEngine on RewriteCond /your/docroot/%{REQUEST_FILENAME} !-f RewriteRule ^(.+) index.php/$1 [ bOkIcA @ 21.07.2003. 03:55 ] @
Hvala, ovo drugo sam trazio. That's it Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|