On 05-08-2010 13:50, Dennis Munding wrote:
> Hej Martin!
> "Martin" skrev...
>> Dennis Munding wrote:
>>> Hej Martin!
>>>> Options +FollowSymlinks
>>>
>>> Skal ovenstående linje med??
>>
>> Den er nu meget rar at have med hvis man bruger symlinks, men det tyder
>> ikke på du gør det, så den kan du undvære
>
> Jeg må melde hus forbi - så meget er jeg ikke inde i det (Læs: Aner ikke
> hvad SymLinks er/gør).
I windows ville man kalde det "genveje" dog er de bare en HEL DEL mere
avanceret på linux.
>
>> Er rewritemodulet installeret?
>
> Jep!
> Kontaktede supporten på mit webhotel - som iøvrigt kører PHP 5.2 - for
> at sikre mig.
Godt
>
>> RewriteRule ^/(.*)?$ /index.php?side=$1
>
> Her taber jeg tråden...
Så fanger vi den igen
> Jeg har forsøgt at sætte mig ind i regular expressions, men kan
> alligevel ikke tolke ovenstående helt...
^/(.*)?$
^ betyder i starten af strengen
/ betyder en skråstreg
() er bare en markering, som så kan bruges senere
..* betyder ALT
? betyder ikke nødvendigt
$ betyder i slutningen af strengen
Så på godt dansk er det noget ala
Hvis der er i starten af strengen er en / (er der altid da URL altid er
www.domain.com/) efter skråstregen er der så ALT - men der behøver ikke
være noget ALT. - og vi grupperer lige ALT
> Det der forvirrer mig mest er, at du har indsat "index.php" - hvorfor?
Du kunne også sagtens skrive
/?side=$1
jeg kan nu bare bedre lide index.php - bare så man er helt sikker - men
det kunne også sagtens være
/article.php?id=$1
> Selvfølgelig har jeg en fil ved navn index.php, men det kommer på intet
> tidspunkt til at stå i adresselinjen.
Nej nemlig - Apache (din webserver) siger til SERVEREN at den skal fortolke
www.domain.com/123
som
www.domain.com/index.php?side=123
men den skal jo ikke redirecte til
www.domain.com/index.php?side=123
> Hvis det kan hjælpe (jeg kan jo have udtrykt mig forkert/givet
> vildledende info), så ser mine links således ud i menuen:
>
> /?side=XXX
Se det er så forkert.
Faktisk skal du kalde dem
www.domain.com/123 (eller bare /123)
Det er jo det din browser skal vise
> Hvor XXX repræsenterer sidenavnet - eks. velkommen
Så skriver vi bare
/velkommen
> I adresselinjen kommer der så til at stå:
>
http://mit-domæne.dk/?side=XXX
>
> hvor jeg så gerne vil have det til at se således ud:
>
http://mit-domæne.dk/XXX
>
> Min index-fil henter sidenavnet og henter derefter de rette elementer
> til den pågældende side.
Bemærk at hvis man skriver
www.domain.com
så fortolker din webserver det faktisk som
www.domain.com/index.php?side=
Altså $_GET['side'] er tom
og bemærk at hvis man skriver
www.domain.com/../etc/kodeordsfil
Så er $_GET['side'] = '../etc/kodeordsfil'
Så du skal virkelig kigge at du ikke bare skriver
include $_GET['side'];
Her kan man evt. lave det tjek i PHP filen, eller direkte i htaccess
i PHP kunne det være noget ala
if (!isset($_GET['side'])) $_GET['side'] = 'forside';
if ($_GET['side'] == '') $_GET['side'] = 'forside';
if (!in_array($_GET['side'], $allowedPages)) {
header('location: /404');
exit;
// Man kunne tilføje nogle flere headers at siden ikke eksisterer osv.
}
require $_GET['side'];
> Hvad har jeg misforstået??
> For jeg er sikker på, at der er noget, jeg misser...
Det korte af det lange er at du linker forkert til dine adresser - dem
skal du skrive som du vil have det til at se ud i browseren.