Mod_ReWrite

Imam vprašanje glede mod rewrite ...

prej nisem delal z mod rewrite, sedaj pa sem naredil page, pa dodal mod rewrite, zadeva dela ... poskusno :)

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.* - [L]
RewriteRule ^([a-z0-9]+)/? view.php?a=$1 [L]

ker stvari še nimam na domeni ampak na http://IP/WEBS/domain.com/ ... zato so vse poti nekako tako:

src="PIC/avto1.jpg", tudi v linkih ...

problem nastane oz. je že ... ko imam mod rewrite pa grem recimo na tak link

http://IP/WEBS/domain.com/view.php/test_image.jpg

sicer spremenljivko test_image.jpg dobim v php vendar je stran brez CSS ker je tudi tam pot podana NEKAJ/css.css in ne http://IP/WEBS/domain.com/NEKAJ/css.css ...

no sedaj pa me zanima če se da to kako drugače rešiti ali morem iti pa sprenit vse poti, slike, css, linki ... ? Vse to namreč kaže narobe, namesto od http://IP/WEBS/domain.com/ kaže od http://IP/WEBS/domain.com/view.php/ naprej ..... :S :(

69 odgovorov

Ko odprem /view/slika.jpg/ dobim Not Found, namesto da bi mi odprlo view.php?a=slika.jpg, kar bi rad dosegel.

Poskusi z absolutno potjo /view.php?a=$1

Tole zdaj rahlo ugibam, nisem stoodstotno preprican, da je to problem, nimam pa casa probat... :)

Bah ne gre ... file not found ... je*eš ta rewrite, sej mi je uspelo da sem spravil view.php?a= ... pa spremenljivka iz naslova, pol pa namesto view.php dam index php pa bo zgledalo takole www.domena.com/spremenljivke.... pač morem vse spremeniti pa dati v index.php ker imam več datotek sedaj, ... drugače pa bo potem tako tudi ok, ker naslov bo enak le vso kodo bom moral spremeniti :S.

Pojma nimam, kaj pocenjas :)

:) ker sem toliko nesposoben da bi usposobil mod_rewrite kot si ti napisal, sem vse spravil v en file, index.php.

V htaccess pa sem dal tole:

RewriteEngine on
RewriteRule ^(.*)/$   index.php?a=$1 [L]

ta modrewrite mi vse kar je od ...www.domena.com/ - od tukaj najprej, vrne v spremenljivko $GET['a'].

Iz te spremenljivke poberem ven tole:

$input = $_GET['a'];
$url_a = str_replace("'", "", $input);
$url_b = str_replace('"', "", $url_a);
$url_c = str_replace("<", "", $url_b);
$url_d = str_replace(">", "", $url_c);
$output = str_replace("\\", "", $url_d);
$clean_url_a = $output;

če bi mi kdo slučajno želel tlačit v forme ali url kako SQL, kodo ali html, ki bi uničil obliko do takrat ko bi jaz to opazil in pobrisal ...

potem pa imam

www.domena.com/spremenljivka1/spremenljivka2/spremenljivka3...

in ko $_GET['a'] "očistim" z zgornjo kodo, ga razbijem na več delov, ločim s "/"

$url_clean_url_a = explode("/", $clean_url_a);

$url_var1 = $url_clean_url_a[0]; // Url var 1
$url_var2 = $url_clean_url_a[1]; // Url var 2
$url_var3 = $url_clean_url_a[2]; // Url var 3
$url_var4 = $url_clean_url_a[3]; // Url var 4
....

tako dobim www.domena.com/spremenljivka1/spremenljivka2/ ... pa v php $urlvar1 = spremenljivka1, $urlvar2 = spremenljivka1 ... itd. Skratka URL ki ga bo google lepo poindexiral :). Pa potem lahko še kak keyword po želji dodam .../key-word/... kjerkoli v url za domeno ... :), ki ga s PHP lahko tudi spustim če je tam samo za indexiranje in ni koristen pri generiranju strani.

To je vse jasno, kje se pa pojavi problem?

Problem je bil da mi tole ni delovalo:

RewriteRule ^/view/(.*)/$        view.php?a=$1 [L]

nevem zakaj ... sedaj pa sem rešil, tako kot je zgoraj opisano ... hvala za pomoč ;).

No, sem že kar precej pregledal tale Mod_Rewrite pa mi kar ne deluje.
Kako bi vi naredili da bi namesto
http://stran/?page=verses&category=ljubezenski
pisalo
http://stran/verzi/ljubezenski-verzi

Lp

Tocno tole bi naredil na tak nacin:

RewriteRule ^/verzi/ljubezenski-verzi/$ /?page=verses&category=ljubezenski [L]

Ampak to je rahlo butasto, imel bos neskoncno mnogo vrstic z RewriteRule...

Najboljse bi bilo nekako takole:
RewriteRule ^/([^/]+)/([^/]+)/$ /?page=$1&category=$2 [L]

Pa ti bo delalo za vse, ampak v tem primeru bo pravilen URI takle: /verses/ljubezenski/

Hm, ne vem zakaj mi noče delat, izgleda da je nekaj drugega narobe.
Sedaj imam takole:
Options +Indexes
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^/verzi/ljubezenski-verzi/$ /?page=verses&category=ljubezenski [L]

Pa kliknem na povezavo
http://stran/?page=verses&category=ljubezenski
pa se nič ne spremeni.
Se vam kaj svita kaj bi bilo?