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

To, kar ti sprasujes nima prav nobene veze z mod_rewrite... Problem imas z relativnimi linki... Vse skupaj lahko resis tako, da zaenkrat, dokler imas stran na disku, v html head dodas naslednje:

<base href="http://IP/WEBS/domain.com/">

Carsko, zdaj pa dela, hvala ti ;).

Uh še ena stvar ...

kaže da nisem imel spremenljivke v php ... drugače pa več nevem kaj od tega je prav

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]
# RewriteRule ^(.*)/? view.php?a=$1 [L]
# RewriteRule ^(.*)/$ view.php?a=$1 [L]
# RewriteRule ^/view[0-9]+$ view.php?a=$1 [L]

rad pa bi imel /view.php/neka-slika.jpg oz. lahko brez jpg, to nima veze ... spremenljivka mora biti z jpg ... naslov pa ne rabi ...

kar je pa drug problem ... zbrisal sem htaccess, pa restartal apacheja ...

login as: root
root@213.157.255.'s password:
Last login: Sun Apr 8 00:16:59 2007 from cpe-213-157-255-
.dynamic.amis.net
Linux Spninx 2.6.18-4-486 #1 Wed Feb 21 15:25:16 UTC 2007 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Spninx:~# /etc/init.d/apache2 restart
Forcing reload of web server (apache2)....
Spninx:~# /etc/init.d/apache2 restart
Forcing reload of web server (apache2)....
Spninx:~# /etc/init.d/apache2 restart
Forcing reload of web server (apache2)....
Spninx:~#

naredil nov htaccess pa dal noter RewriteEngine off pa mi mod-rewrite še vedno deluje :S, sicer nepravilno ker mi nikakor ne spravi spremenljivke v php ...

bi bilo lahko krivo da je mod_rewrite omogočen na celem serverju ? Ker sem ga malo prej inštaliral ... :S

Edit: Tole je že malo smešno, zdaj mi tudi na view.php/a/slika-1.jpg odpre ... slika-1.jpg pa kot spremenljivke še vedno ne spravi v php :@

Seveda ob vsem tem ... datoteke .htaccess ni ... :S

Edit2: Mam še tri page na serveru, pa na vse dela mod_reWrite ... torej je globalno omogočen ... no kakrokoli ... nebi izkalpljal, samo kako spravit tako da bil dobil iz naslov spremenljivko a, v php ?

Mogoče sem našel problem ... če vpišem v htaccess tole

Deny from all

si lahko lepo ogledujem stran ... mislim da apache .htaccess datotek ne upošteva, glede na to da mam že za 2 strani pravil za mod_rewrite, pa ne glede na to kak se mučim pa jih za in od komentiram ne dela ...

kje bi lahko pogledal če apache upošteva .htaccess ? Gre pa za Apache2, PHP5 na Debian GNU/Linux 4.0r0 (etch).

Če bo še kdo imel tak problem:

In case you have a VirtualHost directive make sure it includes "AllowOverride All" and not "AllowOverride None". Secondly, I was using the "RewriteBase /mydrupalsite_directory" as described above and the clean URLs was not working. When I comment that part out they became working. I guess if you already have a VirtualHost directive for that directory you shouldn't specify the RewriteBase.

V virtualhostu je bilo potrebno popraviti zapis default je namreč AllowOverride None.

Cisto nic ne razumem, kaj govoris, pa sem dvakrat prebral zadevo... Lahko to malo bolj pocasi in podrobno pojasnis?

Ja, najprej je bil problem, da Debian 4, po default nastavitvah nima mod_rewrite, ki sem ga inštaliral, potem nikjer spet ni pisalo da ga je potrebno še omogočiti, nato je bil problem v virtualhostu od apacheja, ker je bilo tam tole ... AllowOverride None zaradi česa se htaccess ni upošteval ... sem vse to uredil, in se vračam k učenju pravil za lepše urlje ... prej sem mislil da delam narobe, v resnici pa apache sploh ni upošteval tega kar sem jaz napisal ...

Okej :) ...

Takole, zdej mi je tole ratalo

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

vendar je to kar od domene dalje recimo ../$1/, kako pa bi naredil da če bi bil vmes /view/ bi šlo preko view.php ?

mislim da bi moralo biti nekaj takega

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

potem naj bi bil naslov tak ? /view/$1/ ? Vendar tole ne dela ... :( ... prva koda pošlje vso kodo za domeno kot spremenljivko v file view.php ... jaz pa bi mel takoj po domeni še vmes /view/ pa bi te spremenljivke šle v view.php ... itd ... kak bi to naredil ?

Kaj od tega pa ne dela? Mislim, malo bolj bos moral opisat kaj tocno ti ne dela, uno drugi rewrite rule izgleda cisto legalen...