onvriendelijke url's dynamisch PHP menu

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis Elie

Dennis Elie

25/03/2014 20:49:02
Quote Anchor link
Wie kan mij helpen, ik ben vrij nieuw met PHP en httaccess.. ik probeer al een tijdje zonder succes de URLs van mijn website 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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?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>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo ($_GET["page"]=="" || $_GET["page"]=="home" ? " class='selected'" : ""); ?>

<a href="?page=home" title="Startpagina">
HOME
</a>
</li>

<li>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo ($_GET["page"]=="huren" ? " class='selected'" : ""); ?>

<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?
 
PHP hulp

PHP hulp

19/04/2024 23:28:37
 
Joren Uitzetter

Joren Uitzetter

27/03/2014 16:06:44
Quote Anchor link
Een oplossing zou zijn om bijvoorbeeld uw base_url ergens te declareren en deze te gebruiken in de menu items.
Dus in plaats van bijvoorbeeld href="?page=home" ga je iets krijgen als

href="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $base_url; ?>
?page=home"

Met vriendelijke groet,





J
 
Willem vp

Willem vp

28/03/2014 00:23:52
Quote Anchor link
Wanneer het links naar je eigen website betreft, moet je nooit een $base_url gebruiken, maar altijd relatieve urls. In dit geval zou ik dus eerder gaan voor iets als <a href="/?page=home" title="Startpagina"> (let op de /).

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
 
Ozzie PHP

Ozzie PHP

28/03/2014 01:39:36
Quote Anchor link
>> Absolute urls (dus met http://www.mijndomeinnaam.nl) kun je het beste alleen gebruiken bij links naar andere websites.

Waarom?
 
Willem vp

Willem vp

28/03/2014 03:07:16
Quote Anchor link
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?

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.
 
Dennis Elie

Dennis Elie

28/03/2014 17:50:04
Quote Anchor link
Bedankt voor de reacties..! Echter ik ben vrij nieuw met PHP..
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo ($_GET["page"]=="" || $_GET["page"]=="home" ? " class='selected'" : ""); ?>


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?
 
Willem vp

Willem vp

28/03/2014 18:52:57
Quote Anchor link
Ik denk niet dat je eraan ontkomt om URL rewrites te gebruiken. Tenzij je voor elke URL een apart PHP-bestand wilt aanmaken.

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo ($_GET["page"]=="" || $_GET["page"]=="home" ? " class='selected'" : ""); ?>


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.
 
Dennis Elie

Dennis Elie

28/03/2014 20:05:46
Quote Anchor link
top uitleg, dat maakt voor mij al heel wat meer duidelijk.

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..
 
Willem vp

Willem vp

28/03/2014 23:47:20
Quote Anchor link
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. ;-)
 
Dennis Elie

Dennis Elie

06/04/2014 11:20:34
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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');?>




Dit is één li element voorbeeld uit de menu.php:

<li
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo($_GET["page"]=="" || $_GET["page"]=="home" ? " class='selected'" : ""); ?>
>
<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
 
Kumkwat Trender

Kumkwat Trender

06/04/2014 11:52:12
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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');?>




Dit is één li element voorbeeld uit de menu.php:

<li
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo($_GET["page"]=="" || $_GET["page"]=="home" ? " class='selected'" : ""); ?>
>
<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
 
Willem vp

Willem vp

06/04/2014 12:36:39
Quote Anchor link
Je PHP-code ziet er goed uit, maar het lijkt erop dat je rewriterules niet rewriten.

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.