FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Flitig postare
|
Har sett att bland annat FW CodeIgniter använder sig av url strukturen likt;
www.minadress.se/index.php/hello/ Där hello i sin tur anropar en class med namnet hello. Detta förstår jag relativt väl. I Ci så kollar de typ bara adressen med URL_PATH. Men hur fungerar egentligen url struktur? Fungerar detta på alla webbservrar? Varför får man inte en page not found, eftersom mappen /index.php/hello/ inte finns. Hoppas ni förstår min fråga ![]() |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Mycket flitig postare
|
Det du troligen vill läsa mer om är mod_rewrite.
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html Jag ser dock ingen vits med att ha kvar index.php när det lika gärna kan stå minadress.se/hello/ och då genom mod_rewrite skicka med hello som parameter till index.php. |
||
![]() |
![]() |
![]() |
#3 | |||
|
||||
Har WN som tidsfördriv
|
Det beror på en teknik som kallas URL rewrite. T.ex. mod_rewrite i apache.
Lite intro till rewrite: http://en.wikipedia.org/wiki/Rewrite_engine Url rewrite guide i apache: http://httpd.apache.org/docs/2.0/misc/rewriteguide.html De flesta framework och färdiga system (typ wordpress) ber webbservern att redirecta alla urler som inte är en fil eller mapp som faktiskt finns till index.php och sedan läser dem av urlerna i t.ex. $_SERVER['REQUEST_URI] i php. edit: Exempel på funktion för att avläsa urler: Kod:
function url_segment($x) { $uri=explode('?',$_SERVER['REQUEST_URI']); $segs=explode('/',$uri[0]); array_shift($segs); if(array_key_exists($x,$segs)) return escape($segs[$x]); else return false; } Funktionen filtrerar bort query-stringen. (Frågetecken och allt efter det) Finns det inget på den positionen som efterfrågas så returneras false. Det som returneras filtreras även med en funktion vid namn escape för att förhindra sql injections. Den funktionen ser ut såhär: Kod:
function escape($x) { if(get_magic_quotes_gpc())stripslashes($x); return htmlspecialchars($x); } ![]() Senast redigerad av crazzy den 2009-12-09 klockan 17:28 |
|||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Administratör
|
Nja, i fallet med http://host/index.php/var1/var2 behövs ingen extra url-omskrivning för att en default setup av apache ska hantera den. Då letar Apache från höger steg för steg efter kataloger och filer som matchar URLen. Dvs letar efter /index.php/var1/var2/ sen /index.php/var1/var2, /index.php/var1/, /index.php/var1, /index.php/ och till sist /index.php.
För att undvika att ha med .php i URLen kan man också lägga till en ForceType på alla variabler man vill ska kunna ersätta den (för att alltid använda /index/vars/ så lägger man t ex bara till den på just index. |
||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Har WN som tidsfördriv
|
Du menar $_SERVER['PATH_INFO'] ?
|
|||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Flitig postare
|
Citat:
Är det sökmotors vänligt? |
||
![]() |
![]() |
Svara |
|
|