onvriendelijke url's dynamisch PHP menu
www.le-mattas.nl SEO vriendelijk te maken.
Ik heb wel een idee waar het probleem ligt, en volgens mij is het vrij simpel op te lossen..! Echter ik zie de oplossing niet :(
in mijn index.php staat het volgende:
in de menu.php staat het volgende:
<li>
<a href="?page=home" title="Startpagina">
HOME
</a>
</li>
<li>
<a href="?page=huren" title="Bungalows te huur">
Te huur
</a>
</li>
In de Browser worden de URLs als volgt weergegeven:
http://www.le-mattas.nl/?page=home
?page=huren
?page=kopen etc.
in mijn htaccessfile rewrite ik d.m.v. volgende code:
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
# Specify search friendly URLs
RewriteRule ^huren$ /?page=huren [L]
RewriteRule ^home$ /?page=home [L]
etc.
# Redirect old pages
RewriteCond %{QUERY_STRING} ^page=huren$
RewriteRule ^$ /huren? [R=301,L]
RewriteCond %{QUERY_STRING} ^page=home$
RewriteRule ^$ /home? [R=301,L]
etc.
Het probleem luidt als volgt:
bij het laden van de pagina toont de browser: www.le-mattas.nl
bij het klikken op een menu-item wordt www.le-mattas.nl?page=huren herschreven naar www.le-mattas.nl/huren.. helemaal goed dus.
echter bij het vervolgens klikken op een ander menu-item b.v. de home toont de browser
http://www.le-mattas.nl/huren?page=home
wie o wie helpt me?
Wie kan mij helpen, ik ben vrij nieuw met PHP en httaccess.. ik probeer al een tijdje zonder succes de URLs van mijn website Ik heb wel een idee waar het probleem ligt, en volgens mij is het vrij simpel op te lossen..! Echter ik zie de oplossing niet :(
in mijn index.php staat het volgende:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
error_reporting(E_ALL & ~E_NOTICE);
require_once(basename(($_GET['page']!='' ? $_GET['page'] : 'home') . '.php'));
require_once('footer.php');
?>
error_reporting(E_ALL & ~E_NOTICE);
require_once(basename(($_GET['page']!='' ? $_GET['page'] : 'home') . '.php'));
require_once('footer.php');
?>
in de menu.php staat het volgende:
<li>
<a href="?page=home" title="Startpagina">
HOME
</a>
</li>
<li>
<a href="?page=huren" title="Bungalows te huur">
Te huur
</a>
</li>
In de Browser worden de URLs als volgt weergegeven:
http://www.le-mattas.nl/?page=home
?page=huren
?page=kopen etc.
in mijn htaccessfile rewrite ik d.m.v. volgende code:
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
# Specify search friendly URLs
RewriteRule ^huren$ /?page=huren [L]
RewriteRule ^home$ /?page=home [L]
etc.
# Redirect old pages
RewriteCond %{QUERY_STRING} ^page=huren$
RewriteRule ^$ /huren? [R=301,L]
RewriteCond %{QUERY_STRING} ^page=home$
RewriteRule ^$ /home? [R=301,L]
etc.
Het probleem luidt als volgt:
bij het laden van de pagina toont de browser: www.le-mattas.nl
bij het klikken op een menu-item wordt www.le-mattas.nl?page=huren herschreven naar www.le-mattas.nl/huren.. helemaal goed dus.
echter bij het vervolgens klikken op een ander menu-item b.v. de home toont de browser
http://www.le-mattas.nl/huren?page=home
wie o wie helpt me?
Dus in plaats van bijvoorbeeld href="?page=home" ga je iets krijgen als
href="?page=home"
Met vriendelijke groet,
J
Absolute urls (dus met http://www.mijndomeinnaam.nl) kun je het beste alleen gebruiken bij links naar andere websites.
Gewijzigd op 28/03/2014 00:25:40 door Willem vp
http://www.mijndomeinnaam.nl) kun je het beste alleen gebruiken bij links naar andere websites.
Waarom?
>> Absolute urls (dus met Waarom?
Ozzie PHP op 28/03/2014 01:39:36:
>> Absolute urls (dus met http://www.mijndomeinnaam.nl) kun je het beste alleen gebruiken bij links naar andere websites.
Waarom?
Waarom?
Daarom. ;-)
Je kan het jezelf heel erg moeilijk maken wanneer je absolute URLs gebruikt. Even twee praktijksituaties waar ik zelf mee te maken heb:
1) De website is bereikbaar onder meerdere domeinnamen (domein1.nl, domein2.nl, etc). Als je absolute domeinnamen gebruikt, moet je erop letten dat je links in domein2 niet ineens naar domein1 gaan wijzen.
2) Als je wijzigingen gaat aanbrengen in je website, doe je dat natuurlijk niet meteen op je productiesysteem, maar eerst op een apart ontwikkelsysteem (zeker wanneer je nog een beetje aan het experimenteren bent met nieuwe functionaliteit). Het is knap irritant als al je links dan naar de productiesite wijzen.
Wanneer je je site alleen in PHP bouwt, kun je die base URL nog wel dynamisch maken door die code aan het begin van elke pagina te includen (maar waarom zou je dat doen, want het is extra werk dat eigenlijk niet eens nodig is). Met een wat ingewikkeldere setup gaat dat echter niet meer werken.
De website die ik onderhoud, maakt gebruik van URL rewrites, reverse proxy, Perl request handlers, Perl CGI scripts, shell CGI scripts, server-side includes, JavaScript, XSLT en een beetje PHP. O ja, die reverse proxy stuurt sommige requests ook nog door naar een IIS-server waar C# en VBScript wordt gebruikt. Ik moet er niet aan denken dat op al die plaatsen absolute links zouden moeten worden gegenereerd.
wat moet ik mijn code veranderen zonder dat ik htaccess nodig heb om de urls te herschrijven?
Ik heb het idee dat de fout in dit stuk code in de index zit:
kan iemand mij uitleggen wat hier precies staat?
Toevoeging op 28/03/2014 17:55:44:
Waarom wordt in PHP ?page= gebruikt? kan dat niet op een andere manier?
De rewrites zorgen ervoor dat de aanroep van een pad (/foo, /bar) wordt omgezet naar de aanroep van 1 script met een parameter die aangeeft welk pad is opgevraagd (/index.php?page=foo, /index.php?page=bar; en omdat index.php een script is dat meestal standaard door de webserver ingelezen wordt, valt dat te verkorten naar /?page=foo enzovoort)
Als de URL rewrites er niet zouden zijn, zou je PHP-scripts voor /foo/index.php en /bar/index.php (enzovoort) moeten hebben. Het hangt een beetje van je site af, maar dat is niet altijd praktisch. Bovendien is het waarschijnlijk goedkoper (sneller) om dit door Apache met URL rewrites af te laten handelen dan door PHP.
Toevoeging op 28/03/2014 18:58:27:
Dennis Elie op 28/03/2014 17:50:04:
Ik heb het idee dat de fout in dit stuk code in de index zit:
kan iemand mij uitleggen wat hier precies staat?
kan iemand mij uitleggen wat hier precies staat?
O, vergeten uit te leggen. ;-)
Hier staat dat wanneer de URL geen parameter 'page' heeft of een parameter 'page' met waarde 'home' (dus: ?page=home) dat dan de string " class='selected'" wordt geprint; dat zorgt ervoor dat het betreffende <li>-element geselecteerd wordt. Wanneer 'page' een andere waarde heeft, wordt er niets geprint.
In feite zorgt het er dus voor dat het menu-item dat overeenkomt met de opgevraagde pagina wordt geactiveerd, zodat je aan het menu kunt zien op welke pagina je zit.
Voor zover ik kan beoordelen is er niets mis met deze code.
Met die rewrite rules in htaccess worden de "slechte" urls ook goed herschreven.
Dus als ik vanaf de homepagina in het menu op huren klik, dan toont de browser www.le-mattas.nl/huren (voorheen was dit www.le-mattas.nl/?page=huren).. goed gerewrite dus.
En nu komt het, als ik een tweede keer op een ander willekeurig item klik in het menu blijft de vorige rewrite staan en zet ie weer een ?page= erachter. Zoals hier: http://www.le-mattas.nl/huren?page=faciliteiten
Heeft dit niet iets te maken wat jij net uitlegt? Of kan ik dit oplossen in de htaccess file?
Alvast bedankt... Ik heb de rewriterules online gezet.. dus je kan nu live zien wat er gebeurt..
Ik vermoed dat je refereert naar ?page=huren in plaats van naar /?page=huren. Maar wat ik dan ook weer niet snap, is waarom je in je menu's niet gewoon linkt naar /huren. Daarvoor heb je immers die rewrite rules. ;-)
Dit staat in de index.php:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php error_reporting(E_ALL & ~E_NOTICE);
require_once(basename(($_GET['page']!='' ? $_GET['page'] : 'home') . '.php'));
/* Wanneer de URL geen parameter 'page' heeft of een parameter 'page' met waarde 'home' dan wordt de string " class='selected'" geprint;
dat zorgt ervoor dat het betreffende <li>-element geselecteerd wordt. Wanneer 'page' een andere waarde heeft, wordt er niets geprint.
In feite zorgt het er dus voor dat het menu-item dat overeenkomt met de opgevraagde pagina wordt geactiveerd, zodat je aan het menu kunt
zien op welke pagina je zit. */
require_once('footer.php');?>
require_once(basename(($_GET['page']!='' ? $_GET['page'] : 'home') . '.php'));
/* Wanneer de URL geen parameter 'page' heeft of een parameter 'page' met waarde 'home' dan wordt de string " class='selected'" geprint;
dat zorgt ervoor dat het betreffende <li>-element geselecteerd wordt. Wanneer 'page' een andere waarde heeft, wordt er niets geprint.
In feite zorgt het er dus voor dat het menu-item dat overeenkomt met de opgevraagde pagina wordt geactiveerd, zodat je aan het menu kunt
zien op welke pagina je zit. */
require_once('footer.php');?>
Dit is één li element voorbeeld uit de menu.php:
<li>
<a href="home.php" title="Startpagina">
HOME
</a>
</li>
als ik in bovenstaand voorbeeld bij href="?page=home" gebruik, werkt het wel, echter dan krijg ik onvriendelijke web URL's
en dat wil ik weer niet i.v.m. SEO. Proberen op te lossen met htaccess maar ook daar heel wat problemen ondervonden :(
Gewijzigd op 06/04/2014 11:24:26 door Dennis Elie
Dennis Elie op 06/04/2014 11:20:34:
Is er wellicht iemand die dit stukje code voor me wil herschrijven? Heb alle input van iedereen gebruikt, maar nog steeds zonder resultaat.. Ik ben nieuw met PHP!
Dit staat in de index.php:
Dit is één li element voorbeeld uit de menu.php:
<li>
<a href="home.php" title="Startpagina">
HOME
</a>
</li>
als ik in bovenstaand voorbeeld bij href="?page=home" gebruik, werkt het wel, echter dan krijg ik onvriendelijke web URL's
en dat wil ik weer niet i.v.m. SEO. Proberen op te lossen met htaccess maar ook daar heel wat problemen ondervonden :(
Dit staat in de index.php:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php error_reporting(E_ALL & ~E_NOTICE);
require_once(basename(($_GET['page']!='' ? $_GET['page'] : 'home') . '.php'));
/* Wanneer de URL geen parameter 'page' heeft of een parameter 'page' met waarde 'home' dan wordt de string " class='selected'" geprint;
dat zorgt ervoor dat het betreffende <li>-element geselecteerd wordt. Wanneer 'page' een andere waarde heeft, wordt er niets geprint.
In feite zorgt het er dus voor dat het menu-item dat overeenkomt met de opgevraagde pagina wordt geactiveerd, zodat je aan het menu kunt
zien op welke pagina je zit. */
require_once('footer.php');?>
require_once(basename(($_GET['page']!='' ? $_GET['page'] : 'home') . '.php'));
/* Wanneer de URL geen parameter 'page' heeft of een parameter 'page' met waarde 'home' dan wordt de string " class='selected'" geprint;
dat zorgt ervoor dat het betreffende <li>-element geselecteerd wordt. Wanneer 'page' een andere waarde heeft, wordt er niets geprint.
In feite zorgt het er dus voor dat het menu-item dat overeenkomt met de opgevraagde pagina wordt geactiveerd, zodat je aan het menu kunt
zien op welke pagina je zit. */
require_once('footer.php');?>
Dit is één li element voorbeeld uit de menu.php:
<li>
<a href="home.php" title="Startpagina">
HOME
</a>
</li>
als ik in bovenstaand voorbeeld bij href="?page=home" gebruik, werkt het wel, echter dan krijg ik onvriendelijke web URL's
en dat wil ik weer niet i.v.m. SEO. Proberen op te lossen met htaccess maar ook daar heel wat problemen ondervonden :(
kijk deze topic eens:
http://www.phphulp.nl/php/forum/topic/krijg-geen-data-uit-db/94443/last/
In jouw geval:
RewriteRule ^(.*)$ index.php?page=$1 [L]
Gewijzigd op 06/04/2014 11:54:10 door Kumkwat Trender
Als ik kijk naar je eerste bericht, dan zie ik daarin staan:
RewriteRule ^huren$ /?page=huren [L]
Dit zou volgens mij moeten zijn:
RewriteRule ^/huren$ /?page=huren [L]
enzovoort...
Wat Kumkwat schrijft kan trouwens ook. Dat is iets generieker, dus minder configuratie, maar je moet dan wel opletten dat alle urls worden herschreven, en ik weet niet of je dat wilt.
Gewijzigd op 06/04/2014 12:39:44 door Willem vp