httacces
Als eerste de beste wensen voor 2014.
Nu komt mijn vraag;
Ik ga nu werken met httaccess
Nu heb ik een layout die op elke pagina hetzelfde is, alleen is mijn vraag of dit mogelijk is dat ik hem alleen maar op index.php hoef te laten zien waardoor hij op elke pagina te zien is.
Dit is wel het geval bij index.php?p=xxxx
maar nu wordt het sitenaam.nl/account/login
of dien ik hier met header.php & footer.php te werken , en dit op elke pagina
alvast bedankt
Dit kan op twee manieren.
1. Je include een header en footer steeds.
2. Of je maakt één pagina met index.php?p=xxxx alleen dat is niet zoekmachine vriendelijk, dus je kan er dit van maken index.php/xxxx. Dan wordt dat weer omgezet naar index.php?p=xxxx door een code in de httacces.
De code is:
In dat geval zou je deze vraag helemaal niet hoeven te stellen als je goed begrijpt wat de mod rewrite module eigenlijk doet. Het enige wat er gebeurt is dat de door de gebruiker (lees: browser) aangeroepe url wordt herschreven. De mod rewrite module interpreteert de url en herschrijft het naar de intern bekende url, het pad naar het php script met daarin een querystring met GET parameters.
De gebruiker ziet dus een andere url, maar je scripts krijgen gewoon nog de daar bekende urls te verwerken. Voor je scripts verandert er als je het goed doet dus helemaal niets wat verwerking betreft!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
ErrorDocument 404 /error.php
ErrorDocument 500 /error.php
RewriteEngine on
RewriteRule ^(.*)\.html $1\.php
RewriteRule ^account/register(|/)$ pages/account/register.php
RewriteRule ^account/logout(|/)$ pages/account/logout.php
RewriteRule ^index(|/)$ index.php
RewriteRule ^profile/edit(|/)$ pages/profile/edit.php
RewriteRule ^profile(|/)$ pages/profile/profile.php
RewriteRule ^profile/([^/]+)(|/)$ ./profile.php?id=$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
ErrorDocument 404 /error.php
ErrorDocument 500 /error.php
RewriteEngine on
RewriteRule ^(.*)\.html $1\.php
RewriteRule ^account/register(|/)$ pages/account/register.php
RewriteRule ^account/logout(|/)$ pages/account/logout.php
RewriteRule ^index(|/)$ index.php
RewriteRule ^profile/edit(|/)$ pages/profile/edit.php
RewriteRule ^profile(|/)$ pages/profile/profile.php
RewriteRule ^profile/([^/]+)(|/)$ ./profile.php?id=$1
heb ik al
maar als ik naar localhost/index ga krijg ik de layout
maar als ik naar localhost/account/logout ga dan krijg ik de layout niet meer
Roep je je css etc wel aam met een absolute path (begint met / )?
In de css staan alle images als volgt:
#website #top {
background-image: url(../images/top-top.png);
height: 12px;
width: 920px;
}
Rick kem op 08/01/2014 10:37:21:
Allereerst sorry voor mijn late reactie
In de css staan alle images als volgt:
#website #top {
background-image: url(../images/top-top.png);
height: 12px;
width: 920px;
}
In de css staan alle images als volgt:
#website #top {
background-image: url(../images/top-top.png);
height: 12px;
width: 920px;
}
Als je dit naar /images... verandert (dus met / ervoor) zal die altijd vanaf je 'root' zoeken naar het plaatje en zou het goed moeten gaan.
Andere files en afbeeldingen laad je dan ook op deze manier in.
Edit:
Foutje. /../ moest / zijn.
Gewijzigd op 08/01/2014 11:40:04 door Michael -
index.php
<link href="/..css/css.css" rel="stylesheet" type="text/css" />
<link href="/../css/header.css" rel="stylesheet" type="text/css">
css.css
#website #top {
background-image: url(/../images/top-top.png);
height: 12px;
width: 920px;
}
Rick kem op 08/01/2014 10:57:43:
Nu laat die helemaal niks.
index.php
<link href="/..css/css.css" rel="stylesheet" type="text/css" />
<link href="/../css/header.css" rel="stylesheet" type="text/css">
css.css
#website #top {
background-image: url(/../images/top-top.png);
height: 12px;
width: 920px;
}
index.php
<link href="/..css/css.css" rel="stylesheet" type="text/css" />
<link href="/../css/header.css" rel="stylesheet" type="text/css">
css.css
#website #top {
background-image: url(/../images/top-top.png);
height: 12px;
width: 920px;
}
in de eerste regel mis je een /
/../images
dat is een heel vreemde url
/css/
/images/
lijkt me logischer
htaccess:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^pages/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$ index.php?p=$1&$2=$3&$4=$5&$5=$6 [NC]
RewriteRule ^pages/(.*)/(.*)/(.*)/(.*)/(.*)$ index.php?p=$1&$2=$3&$4=$5 [NC]
RewriteRule ^pages/(.*)/(.*)/(.*)$ index.php?p=$1&$2=$3 [NC]
RewriteRule ^pages/(.*)$ index.php?p=$1 [NC]
index.php
<link href="css/css.css" rel="stylesheet" type="text/css" />
<link href="css/header.css" rel="stylesheet" type="text/css">
css
#website #top {
background-image: url(../images/top-top.png);
height: 12px;
width: 920px;
}
pages/index.php
Code (php)
nu kan ik de url als volgt aanroepen:
localhost/test/pages/home
maar nu heb ik dus ook bestanden staan in:
pages/account/logout
dat gaat dus niet werken.
Iemand enig idee hoe ik dit kan gaan oplossen.
background-image: url(/images/top-top.png);
of in welke map de map images/ dan ook staat.
Overigens vind ik zo'n hele berg rewrite-rules bijzonder onwerkbaar. Veel eenvoudiger is het om alles (wat niet gevonden wordt omdat het een css of image oid) te herschrijven naar index.php
In index.php kun je dan met php kijken naar $_SERVER['REDIRECT_URL'] om te beoordelen welke pagina je dan zou willen includen en op grond daarvan ook te kijken welke parameters je nog meer in de url verwacht.