Ik heb een stukje code om van taal te switchen op mijn site. Dat werkt prima behalve op dynamische pagina's. Als ik bijvoorbeeld de taal aanpas op de index.php dan onthoud hij dat overal maar ik kan de taal alleen aanpassen op index.php contact.php en andere vaste paginas.

Als ik de taal wil aanpassen op bijvoorbeeld service-naam.html (in werkelijkheid content.php op de server) dan gebeurd er niets. Hij blijft altijd op de taal die al gekozen is op een niet dynamische pagina.

Waar kan dat aan liggen?

Hier het stuk waarmee je de taal kiest:
<?
$actual_link = 'http://' . $_SERVER['HTTP_HOST'] . strtok($_SERVER['REQUEST_URI'], '?');
<a href="<? echo $actual_link; ?>?lang=en" class="btn-selector">EN</a>
<ul>
<li class="active"><a href="<? echo $actual_link; ?>?lang=en">EN</a></li>
<li><a href="<? echo $actual_link; ?>?lang=fr">FR</a></li>
<li><a href="<? echo $actual_link; ?>?lang=nl">NL</a></li>
</ul>
?>
En dit staat bovenaan mijn connection file:
<?
session_start();

if ($_GET['lang'] != '') {
$_SESSION['lang'] = $_GET['lang'];
} else if ($_SESSION['lang'] == '') {
$_SESSION['lang'] = 'nl';
}
?>

De urls van de dynamische paginas kloppen ook gewoon. Het taal switch linkje gaat hiernaartoe bij bijvoorbeeld over ons: http://website.com/over-ons.html?lang=fr in plaats van http://website.com/content.php?lang=fr

Hier nog een stuk van mijn htaccess mocht dat het iets duidelijker maken:

<?
DirectoryIndex
RewriteEngine on

#Indexes uitzetten
Options -Indexes

#Cross site access toestaan
Header set Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"

#CMS rewrite
RewriteRule ^cms/$ /cms/administrator [L]

#Website naam

DirectoryIndex index.php

RewriteRule ^(.*).html content.php?alias=$1 [L]

?>
Joakim Broden op 07/02/2017 15:20:10

[quote="Ozzie PHP op 07/02/2017 15:00:16"]
Probeer in je htaccess eens dit dan ...

... content.php?alias=$1 [[color="red"]QSA[/color], L]

Als de GET waarde gewoon weer gegeven word werkt dit dus, neem dus aan dat het niet aan .htaccess ligt.

Joakim Broden op 07/02/2017 14:45:38

Waar word je content geset? Je haalt teksten uit lang.php maar waar word dit gedaan, werken de sessies wel in je dynamische pagina's (geen header allready sent)? Heb je een fout melding?

Nogmaals, misschien dat we dan wat kunnen vinden.
[/quote]

Ik include mijn lang.php onder mijn connection.php in de header.php. Dan op de paginas zelf zet ik gewoon de variabelen op de juiste plek. In lang.php check ik wat de inhoud van de sessie is.

De sessie werkt op dynamische paginas in de zin dat er nog een waarde in de sessie zit en ik die ook kan echoen, aanpassen kan alleen niet. Ik heb verder nergens een foutmelding, error log is ook leeg.

Wanneer ik op index.php de taal zet op EN en de sessie waarde echo, dan laat hij EN zien op index.php en ook op alle dynamische paginas, maar op de index kan ik hem aanpassen naar een andere taal en op dynamische paginas niet, zet ik hem daar op bijvoorbeeld FR dan blijft de ge-echode waarde EN.
In je .htaccess staat:

RewriteRule            ^(.*).html content.php?alias=$1 [L]

Hier word je 'lang' parameter niet geset voor de content.php pagina. Waardoor je dus altijd de 'lang' waarde van de sessie hebt of standaard NL krijgen.
Dit zorgt ook weer voor een 500 internal server error.

<?
RewriteRule ^(.*).html dienst.php?alias=$1 [L, QSA]
?>

Edit: laat maar er moest geen spatie tussen L en QSA.

Met die aanpassing werkt het eindelijk! Bedankt voor de hulp.

Reageren