Kom ihåg mig?
Home Menu

Menu


/index.php/hello/ hur fungerar detta?

Ämnesverktyg Visningsalternativ
Oläst 2009-12-09, 15:50 #1
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
Standard /index.php/hello/ hur fungerar detta?

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
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-09, 17:20 #2
BjörnJ BjörnJ är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2009
Inlägg: 971
BjörnJ BjörnJ är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2009
Inlägg: 971
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.
BjörnJ är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-09, 17:22 #3
crazzys avatar
crazzy crazzy är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2007
Inlägg: 1 089
crazzy crazzy är inte uppkopplad
Har WN som tidsfördriv
crazzys avatar
 
Reg.datum: Aug 2007
Inlägg: 1 089
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;
}
Så om du anropar den som url_segment(0) så får du det som kommer efter första slashet.
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);
}
Ett litet exempel på hur man kan göra för att läsa av urler på ett fint sätt.

Senast redigerad av crazzy den 2009-12-09 klockan 17:28
crazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-09, 18:47 #4
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
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.
Clarence är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-09, 19:41 #5
crazzys avatar
crazzy crazzy är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2007
Inlägg: 1 089
crazzy crazzy är inte uppkopplad
Har WN som tidsfördriv
crazzys avatar
 
Reg.datum: Aug 2007
Inlägg: 1 089
Du menar $_SERVER['PATH_INFO'] ?
crazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-10, 09:54 #6
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
Citat:
Ursprungligen postat av Clarence Visa inlägg
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.
Detta bör alltså fungera på mer eller mindre alla servrar?
Är det sökmotors vänligt?
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 02:32.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017