Avatar billede blach Nybegynder
01. april 2006 - 18:27 Der er 8 kommentarer og
2 løsninger

RewriteEngine og tjek på ID

Jeg har lavet en .htAccess fil således:
------------------------------------------
RewriteEngine On
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond  %{REQUEST_FILENAME} !-d
RewriteRule  ^(.+) /index.php?page=$1 [L]
------------------------------------------
Og mine normale URL'er ser således ud:
index.php?page=29

Det ser umiddelbart fint ud, kan i hvert fald skrive f.eks. /forside/


Mit problem er nu, hvordan linker jeg rundt?
Før skrev jeg f.eks.:
<a href="?page=29">Forside</a>
Hvor Forside trækkes ud af database - denne variabel skal vel "renses" for ulovlige tegn og sættes ind som:
<a href="/Forside/">Forside</a>

Bagefter, hvordan tjekker jeg om Forside er sat? Dvs. før skrev jeg f.eks.:
if($HTTP_GET_VARS[page] == '29') {

}
Så skal jeg vel "hive" variablen Forside fra URL? Eller kan man stadig poste ID'et på en måde?

På forhånd tak :)
Avatar billede fixxxer Nybegynder
02. april 2006 - 18:59 #1
Fidusen med mod_rewrite er at det er klienten der ser den "pæne" URL - serveren ser den stadig som "index.php?page=forsiden".

Men det er jo også her dit problem er, da du vil tjekke et id-nummer.
Det burde dog ikke være mere kompliceret end at du i din tabel (vil jeg gætte på) med side-id og navne, matcher og finder id-nummeret der passer til "forside":

mysql_query("SELECT id FROM side_tabel WHERE side_navn = $_GET['page']");
Avatar billede blach Nybegynder
02. april 2006 - 19:50 #2
fixxxer --> Præcis  $_GET['page'] jeg ledte efter :)

Men den udskriver:  Forside/
Hvordan sorterer jeg den / fra?
Avatar billede blach Nybegynder
02. april 2006 - 19:54 #3
$side_id = ereg_replace('[^0-9]', '', $_GET['page']);

Således ? :)

Hvis nu at jeg har et navn liggende, som f.eks. indeholder æ, ø eller å, mellemrum eller andre ulovlige tegn, skal disse så ikke sorteres fra når jeg linker, så det bliver en
"pænere" URL?
Avatar billede blach Nybegynder
02. april 2006 - 22:01 #4
Det var nok nærmere sådan her:
$side_navn = ereg_replace('[^A-Za-z]', '', $_GET[page]);
Avatar billede blach Nybegynder
02. april 2006 - 23:19 #5
Nu er problemet så, at nogle af mine side_navn i databasen er gemt med æ, ø, å og mellemrum mv.
Man kan ikke rense dette i database kaldet?

Altså f.eks.:
$side_navn = ereg_replace('[^A-Za-z]', '', $_GET[page]);

mysql_query("SELECT id FROM side_tabel WHERE ereg_replace('[^A-Za-z]', '', side_navn) = $side_navn");
Avatar billede blach Nybegynder
03. april 2006 - 11:29 #6
Jeg fandt ud af det igår...

Nu har jeg kun 1 problem, og tror det kræver en udvidelse af min .htaccess fil:

Jeg har inddelt siden i følgende sites, alt efter sprog-valg:
www.siden.dk
www.siden.dk/uk/
www.siden.dk/de/

Den første virker helt fint. Men når jeg linker over til f.eks. /uk/ og herfra klikker rundt, så skifter den tilbage til den første.
Jeg ved ikke om man kunne lave .htaccess så den kun tjekker på små mappe-navne? og så lave /UK/

Eller hvad er løsningen på dette problem?
Avatar billede blach Nybegynder
04. april 2006 - 16:59 #7
Avatar billede fixxxer Nybegynder
04. april 2006 - 17:01 #8
Svar selv og accepter svar.

Så er spørgsmålet nemlig lukket :)
Avatar billede blach Nybegynder
04. april 2006 - 17:18 #9
Vi kan også dele, du hjalp med første del!
Avatar billede fixxxer Nybegynder
10. april 2006 - 21:26 #10
Så pyt :)
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