Avatar billede BTEngineer Novice
12. november 2009 - 15:20 Der er 8 kommentarer og
1 løsning

URL Rewriting?

Hej Eksperter.

Jeg vil virkelig gerne lave nogle "pæne links" til min hjemmeside, og bruge noget andet end i iframe til at loade indholdet.

Jeg vil gerne have mine links til at se således ud:
minside.dk/mappe/mappe1/533 f.eks.

Jeg har læst om URL rewriting og har følgende htaccess fil:
RewriteEngine on
RewriteRule ^(.+)/$ index.php

Men jeg har ingen anelse om, hvordan jeg skal koble det sammen med min index, og hvordan jeg skal få loadet mine filer. Min index ser således ud:

<html>

<head>
<title>test index</title>

<style type="text/css">

body{
text-align: center;
}

#top {
    position:relative;
    left:0px;
    top:0px;
    width:800px;
    height: 75px;
    background: orange;
    margin: 0 auto;
}

#main {
    position:relative;
    left:0px;
    top:0px;
    width:800px;
    height: 35px;
    background: orange;
    margin: 0 auto;
    text-align: center;
}

#content {
    position:relative;
    left:0px;
    top:0px;
    width:800px;
    height: 100%;
    background: orange;
    margin: 0 auto;
    text-align: center;
}
</style>

</head>

<body>

<div id="top">LOGO</div>

<div id="main">
<a href="test1.php">Test 1</a> -
<a href="test2.php">Test 2</a> -
<a href="test3.php">Test 3</a> -
<a href="test4.php">Test 4</a> -
<a href="test5.php">Test 5</a> -
</div>

<div id="content">
<?php
// I eksemplet forudsætter vi at adresselinjen er:
// domain.dk/blah/test/123/foo/

$str = preg_replace("'/'", "", $_SERVER['REQUEST_URI'], 1);
$dele = explode("/", $str);

echo $dele[0]; //Indeholder: blah
echo $dele[1]; //Indeholder: test
echo $dele[2]; //Indeholder: 123
echo $dele[3]; //Indeholder: foo
?>
</div>

</body>

</html>

Jeg har taget udgangspunkt i denne artikel:
http://www.phpartikler.dk/artikler/htaccess.php

Hvad dælen gør jeg nu?

Håber i kan hjælpe :-)

M.V.H
Henrik
Avatar billede virtual1ty Nybegynder
12. november 2009 - 16:28 #1
Et eksempel kunne være:

$dele[0]; //Indeholder: nyheder
$dele[1]; //Indeholder id'et på nyheden (fx 123)

include($dele[0] . ".php?id=" . $dele[1]); // bliver til: nyheder.php?id=123


Så i ovenstående eksempel vil scriptet inkludere nyheder.php og vise nyheden med id 123, når brugeren skriver flg. URL:

http://domain.dk/nyheder/123/

Dette er bare én af mange måder at lave det på, du kan jo evt. selv lege lidt med det.

Håber du blev lidt klogere, ellers spørger du bare igen.
Avatar billede BTEngineer Novice
12. november 2009 - 18:42 #2
Det hjalp på forståelsen :-)

Men, jeg får en fejl:
Notice: Undefined offset: 1 in C:\wamp\www\index.php on line 66

Warning: include(.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\index.php on line 68

Warning: include() [function.include]: Failed opening '.php' for inclusion (include_path='.;C:\php5\pear') in C:\wamp\www\index.php on line 68

Jeg køre det på en wamp server (apache), hvis det har noget at sige.
Avatar billede virtual1ty Nybegynder
12. november 2009 - 19:26 #3
Må jeg se den linje kode, hvor du har skrevet din include() ?
Avatar billede virtual1ty Nybegynder
12. november 2009 - 19:29 #4
Ah, det er min fejl.

$dele[0]; //Indeholder: nyheder
$dele[1]; //Indeholder id'et på nyheden (fx 123)

include($dele[0] . ".php?id=" . $dele[1]); // bliver til: nyheder.php?id=123


$dele[0] og $dele[1] skal altid tjekkes om de er tomme, INDEN man forsøger at inkludere noget som helst. Ellers vil scriptet forsøge at inkludere en fil ved navn ".php".

$dele[0]; //Indeholder: nyheder
$dele[1]; //Indeholder id'et på nyheden (fx 123)

// Tjek om der er data i $dele[0] og $dele[1]
if (!empty($dele[0]) && !empty($dele[1]))
    include($dele[0] . ".php?id=" . $dele[1]);


Prøv ovenstående engang og se om det hjælper.
Avatar billede BTEngineer Novice
13. november 2009 - 08:15 #5
Det reducerede da fejlene, men:

Notice: Undefined offset: 1 in C:\wamp\www\index.php on line 66

Jeg skal egentlig bare have den til at loade mine test.php filer.
Når jeg trykker på test1 så åbner den en ny side. Ville gerne have det til at åbne på index'en selvfølgelig.
Avatar billede BTEngineer Novice
14. november 2009 - 08:16 #6
Jeg har lige prøvet at uploade det på en af mine hjemmesider, og det virker nu :-) - så det var noget med wamp serveren.

Well, når jeg trykker på Test 1, så åbner den i det samme vindue, jeg vil jo gerne have den til at åbne, her:

<div id="content">
<?php
$str = preg_replace("'/'", "", $_SERVER['REQUEST_URI'], 1);
$dele = explode("/", $str);

$dele[0]; //Indeholder: nyheder
$dele[1]; //Indeholder id'et på nyheden (fx 123)

// Tjek om der er data i $dele[0] og $dele[1]
if (!empty($dele[0]) && !empty($dele[1]))
    include($dele[0] . ".php?id=" . $dele[1]);
?>
</div>
Avatar billede virtual1ty Nybegynder
14. november 2009 - 13:59 #7
Kan du lige vise koden til linket til "Test 1"?
Eventuelt uddybe hvad det er du vil opnå, for det har jeg vist ikke helt forstået.
Avatar billede BTEngineer Novice
16. november 2009 - 18:34 #8
Well jeg fandt en anden løsning - bare noget php, hvilket er ganske udmærket. Men jeg har nu et helt andet problem, nemlig noget css. Kunne det tænkes at det var noget du kunne hjælpe med i stedet?

Jeg har opbygget min side i divs, hvilket er noget nyt for mig.
Det er faktisk gået overraskende godt, men der er selvfølgelig opstået et problem, jeg simpelthen ikke kan få løst.

Hvis man er på forsiden, og trykker på information, hvor der er en del tekst, så rykker hele siden sig x-antal pixels, hvilket ser utrolig dumt ud. Det gør den i FIREFOX men ikke i IE. Derudover, så står nogle af tingene også dumt i IE8. Super irriterende.

Har du mulighed for at hjælpe med det, i stedet? :-)
Avatar billede BTEngineer Novice
17. november 2009 - 13:27 #9
Opretter en ny tråd med det.
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