Avatar billede eikhorsholm Nybegynder
01. august 2008 - 18:45 Der er 13 kommentarer og
2 løsninger

Pæne URLs med PHP og .htaccess.

Er der nogen som kender en god tutorial, eksempel el. lign. på hvorledes man danner pæne URLs med PHP og .htaccess (på Apache server).

Jeg har kigget lidt på:
http://firsttube.com/read/PHP-Lesson-1-Pretty-URLs
http://www.alistapart.com/articles/succeed
http://www.roscripts.com/Pretty_URLs_-_a_guide_to_URL_rewriting-168.html

Og de griber alle det forskelligt an og ingen løser det rigtig godt. Jeg kunne rigtig godt tænke mig en løsning med PHP og .htaccess, hvor man ikke skal ændre i .htacces for hver side man har.
Avatar billede showsource Seniormester
01. august 2008 - 19:46 #1
Nu ved jeg ikke ligehvad du mener med hver side du har ?
Bruger selv flg.

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z]+)(/)?$ /index.php?id=$1

Hvis det ikke er en fil.
Hvis det ikke er et dir.
Bogstaverne a-z, ( store og små ) kan bruges, ex. domain.dk/kontakt
Samt også acceptere / tilsidst i url
doamin.dk/kontakt/

Men prøv at kikke lidt her:
http://forums.devshed.com/apache-development-15/mod-rewrite-guide-common-requests-267522.html
Avatar billede showsource Seniormester
01. august 2008 - 19:48 #2
Og b.t.w. bruger jeg ALTID / foran stiangivelser, f.eks.
<link rel="stylesheet" type="text/css" href="/mystyle.css">
<img src="/images/image.jpg">
Avatar billede eikhorsholm Nybegynder
03. august 2008 - 15:57 #3
Hmmm... Jeg har prøvet med din .htaccess fil (ændret id= til page=) og derefter en fil som hedder index.php med følgende:

<?php
echo "Write this no matter what...!"
if(!isset($_GET['page'])) {
    echo "foo";
} elseif(isset($_GET['page'])) {
    switch($_GET['page']) {
        case "frontpage":
            include("frontpage.php");
            break;
    }
}
?>

jeg har samtidig en side som hedder frontpage.php. Når jeg så skriver adressen http://minside.dk/frontpage/ så virker det som om den hopper direkte ind på frontpage.php og ikke index.php?page=frontpage
Avatar billede showsource Seniormester
03. august 2008 - 18:45 #4
Nu ved jeg ikke hvad du mener med "så virker det som om" ?

Og jeg ville nok gøre så'n:

index.php :
<?php
$mypage = (isset($_GET["page"]) ? $_GET["page"] : "/");

switch($mypage)

{
    case="frontpage":
    include("frontpage.php");
    break;

    case="kontakt":
    include("kontakt.php");
    break;

    default:
    include("indexside.php");

}
Avatar billede sjh Nybegynder
03. august 2008 - 23:07 #5
Se her: http://www.phpartikler.dk/artikler/htaccess.php
Brug eventuel: Alternativ metode (Se bunden af siden)

Du kan eventuel smide din .htaccess-file i en under mappe så den ikke overskriver alle dine sider, men kun i under mappen.. fx.:

under mappe = artikler

http://www.domæne.dk/artikler/
Avatar billede sjh Nybegynder
03. august 2008 - 23:14 #6
Du kan så bruge parse_url() for at få flere informationer om din url:

<pre>
<?php
  $array_url = parse_url($_SERVER['REQUEST_URI']);
  print_r($array_url);
?>
</pre>
Avatar billede eikhorsholm Nybegynder
05. august 2008 - 15:35 #7
Har lige fundet ud af at ErrorDocument 404 "test" ikke virker.
Er der nogen som har en ide til hvorfor?

I phpinfo kan jeg se at mod_rewrite er loaded.
Avatar billede sjh Nybegynder
06. august 2008 - 14:07 #8
eikhorsholm : Skulle vi nu ikke bare holde os til dit spørgsmål.. ;)
Avatar billede sjh Nybegynder
06. august 2008 - 15:43 #9
Det er nok fordi du ikke får lavet et HTTP 404 error, den vil jo kun udskrive "test" hvis du skriver url til en html-file som ikke er på serveren.. ;)

prøv at skrive: ( Udskift dit-domæne.dk med dit eget domæne )
http://dit-domæne.dk/denne-side-ligger-ikke-paa-serveren.htm

Så vil den sikkert skrive "test"
Avatar billede eikhorsholm Nybegynder
06. august 2008 - 20:43 #10
Nu har jeg endelig fået .htaccess til at virke.
sjh -> du har nok ret. Det burde være et andet spørgsmål. Sorry.

Min .htaccess ser nu således ud:

RewriteEngine on
RewriteRule ^(.+)/$ index.php [L]

Og i min index.php har jeg:

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


det hele virker fint, pånær at jeg f.eks. ikke kan linke til mit stylesheet da min adresse f.eks. kan hedde:
domæne.dk/
og
domæne.dk/side2

og det resulterer i forskellige adresser til stylesheetet?
Avatar billede sjh Nybegynder
06. august 2008 - 20:59 #11
Som phpartikler.dk skriver:
Så er det en alternativ metode.. Den er selfølige ikke smart hvis du skal bruge den på roden af dit domæne.

Og som Jeg også skriver:

Smide din .htaccess-file i en under mappe så den ikke overskriver alle dine sider, men kun de side som er i under mappen.. fx.:

under mappe = artikler

http://www.domæne.dk/artikler/

Så kan du hente stylesheetet fra roden..
http://www.domæne.dk/style.css
Avatar billede showsource Seniormester
07. august 2008 - 07:38 #12
Du skal vel blot bruge / foran stien til billeder/stylesheet m.m.

<link rel="stylesheet" type="text/css" href="/style.css">
<img src="/images/billede.jpg">
Avatar billede eikhorsholm Nybegynder
07. august 2008 - 09:41 #13
showsource -> hvis du laver et svar så deler jeg pointene mellem dig og sjh.

:-)

Jeg tror jeg skal prøve mig frem. Men endelig virker mod_rewrite, så skal bare lege lidt med det. Håber jeg ;-)
Avatar billede showsource Seniormester
07. august 2008 - 11:10 #14
Ok

Personligt brder jeg mig ikke om at blot bruge ^(.+) i en mod_rewrite, men det er jo en helt anden sag :O)
Avatar billede sjh Nybegynder
07. august 2008 - 11:18 #15
showsource: Det kommer meget and på hvad man skal bruge det til..

Fx. Så har jeg nogle pdf-filer som kun kan hentes hvis brugeren er logget ind, og det er jo nemmest at tjekke gennem en php-side så kan php jo bare sende filen til brugeren. ;)

Og igen, ^(.+) er jo også kun en alternativ metode.. Men det betyder ikke noget i Mit tilfælde da alle mine pdf-filer ligger i en undermappe sammen med .htaccess-filen ;)
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