Avatar billede skwizie Nybegynder
02. november 2007 - 12:13 Der er 14 kommentarer og
1 løsning

Biblioteker istedet for filer

Jeg har set flere og flere steder benytter sig af at bruge biblioteker i deres opbygning af sites istedet for en fil.

Er der nogen fordel i at man opbygger sitet som:

www.minside.dk/ny-artikel-med-titel/

istedet for:

www.minside.dk/visArtikel.php?ID=100

Hvordan kan man evt. bygge et sådan site op?
Avatar billede doomstone-dk- Nybegynder
02. november 2007 - 16:24 #1
Det hedder mod_rewrie, og er et apache addon.

Lav en fil som hedder ".htaccess"
og skriv dette i den.

Options -Indexes
Options +FollowSymLinks
DirectoryIndex index.php

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

Så vil f.eks. www.minside.dk/ny-artikel-med.title/ blive sendt til index.php med $_GET['route'] = array('0' => "ny-artikel-med.title");
osv...
Avatar billede doomstone-dk- Nybegynder
02. november 2007 - 16:25 #2
Sorry $_GET['route'] ville være "/ny-artikel-med-title" og ikke et array, så kan du selv splitte den op med en explode!

Husk at enable mod_rewirte i apache før du prøve :D
Avatar billede skwizie Nybegynder
02. november 2007 - 17:44 #3
OK! Er det noget man kan lave på et webhotel?

Og i så fald, er det nogen fordel?
Avatar billede doomstone-dk- Nybegynder
02. november 2007 - 18:22 #4
Jeg ved at one.com har mod_rewrite enablede, men ellers hør din udbyder omkring det.

Fordelen er kun at din brugers adresse bare ser pæner ud.
Avatar billede styrken Nybegynder
04. november 2007 - 21:13 #5
ja og så at google har lettere ved at indexere siden.
Avatar billede skwizie Nybegynder
05. november 2007 - 09:26 #6
Jeg kom til at tænke på, hvad nu hvis man har flere biblioteker i stien, eks.:

www.minside.dk/artikelType/artikelID/

Hvordan skiller man det så ad, så man kan benytte de to serate værdier?

Skal man lave en rewriterule mere?
Avatar billede doomstone-dk- Nybegynder
05. november 2007 - 13:40 #7
Men den .htaccess jeg har lavet til dig ville dette link:
www.minside.dk/artikelType/artikelID/
Være det samme som:
www.minside.dk/index.php?route=artikelType/artikelID/

Og så kan du nemt slå den op med koden
$tmp = explode("/", $_GET['route']);
$arg = array();
foreach($tmp as $data)
{
  if($data != "") $arg[] = $data;
}
print_r($arg);

----- OUTPUT ------
array ('0' => artikelType,
      '1' => artikelID )

Håber det hjælper.
Avatar billede skwizie Nybegynder
05. november 2007 - 14:02 #8
Ja, det hjalp mig. Man kan ikke lave en "explode" i .htaccess filen? Men OK, problemet er jo heller ikke større end bare at lave den explode af arrayet i index filen...
Avatar billede doomstone-dk- Nybegynder
05. november 2007 - 16:52 #9
Nej alt php koden skal være i dine php filer.
Dette er en classe fra et system jeg er igang med, den er ikke færdig men den kan måske hjælpe dig lidt.

<?PHP
class route
{
    var $arg = "";
    var $module = "";
    var $pageid = 0;
       
    function load()
    {   
        global $_GET;
        $tmp = explode("/", $_GET['route']);
        $this->module = $this->FetchModuleName($tmp[0]);
        if(is_numeric($tmp[1]))
        {
            $this->pageid = $tmp[1];
            unset($tmp[1]);
        }
        unset($tmp[0]);
        $this->arg = implode("/", $tmp);
        $this->arg = explode("/", $this->arg);
        // Cleaning up the aguments.
        $this->CleanArg();
    }

    private function FetchModuleName ( $name )
    {
        $status = TRUE;
        $path = PATH_MODULE . $name . "/index.php";
        if($status == TRUE && !file_exists($path)) $status = FALSE;

        if($status == FALSE || !$name) $name = DEF_MODULE;
        return $name;
    }

    private function CleanArg ()
    {
        $tmp_array = array();
        for($i=0;$i<=count($this->arg)-1;$i++)
        {
            if($this->arg[$i]) $tmp_array[] = $this->arg[$i];
        }
        $this->arg = $tmp_array;
    }

    public function RequireModule ()
    {
        $path = PATH_MODULE . $this->GetModule() . "/index.php";
        require_once( $path );
        return true;
    }

    public function MakeLink ( $module , $page_id , $arg )
    {
        if(is_array($arg))
        {
            $__arg = implode("/", $arg);   
        }
        else
        {
            $__arg = $arg;
        }
        $link = $module . "/" . $page_id . "/" . $__arg;
        if(MOD_REWRITE == TRUE)
        {
            return PATH_HTTP . $link;
        }
        else
        {
            return PATH_HTTP . "index.php?route=" . $link;
        }
    }

    public function &GetCatId()
    {
        return $this->catid;
    }

    public function &GetModule()
    {
        return $this->module;
    }

    public function GetArg()
    {
        return $this->arg;
    }
}
?>
Avatar billede skwizie Nybegynder
06. november 2007 - 12:48 #10
Jeg syntes ikke jeg kan få det til at virke helt. Jeg har forstået metoden i det, men jeg har nu lavet en .htaccess fil og lagt den i samme mappe som min index.php fil. Men der sker ikke rigtig noget, når jeg prøver at skrive /test/. Den siger blot at den ikke kan finde siden....
Avatar billede skwizie Nybegynder
06. november 2007 - 13:59 #11
Jeg har fået det til at virke... mod_rewrite er ikke aktiveret på min Qnap server herhjemme! Har du nogen ide om hvordan man kan aktivere at man kan bruge mod_rewrite på en Qnap?
Avatar billede doomstone-dk- Nybegynder
06. november 2007 - 18:47 #12
Åben din apatche config fil og tilføj

LoadModule rewrite_module modules/mod_rewrite.so
Avatar billede skwizie Nybegynder
07. november 2007 - 08:01 #13
Syntes jeg har prøvet, men det virker ikke rigtig syntes jeg...
Avatar billede skwizie Nybegynder
07. november 2007 - 11:40 #14
Den har ikke filen mod_rewrite.so liggende, og kan jo derfor ikke loade modulet. Kan man få fat på den fil et sted og ligge den ind sammen med de andre moduler og så få den til at hente den...
Avatar billede doomstone-dk- Nybegynder
08. november 2007 - 07:42 #15
Jeg bruger selv servern WAMP, den har det instaleret. prøv den :D

www.wampserver.com
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester