2013-04-30 118 views
0

我正在开发一个multilang站点。在传递给url的varible上生成的内容。关于我们页面的例子我的网址是:domain.com/file.php?id=1我有一个主文件,并在该文件中查询得到所选菜单的ID。php多lang站点干净的网址

如果更改语言,我的网址会变为domain.com/file.php?id=1 & lang = en。每次我改变我的网址添加一个朗多这样的语言:domain.com/file.php?id=1 & LANG = EN & LANG = FR & LANG = DE & LANG = EN .....

在其他multilang项目中我使用过这个:header("location: ".$_SERVER['SCRIPT_NAME']);但它是不那么动态的页面。像这样:domains.com/aboutus.php。我的意思是:页数是静态的。用户无法添加或删除页面。

这次因为我在URL中传递了页面ID,我尝试了header("location: ".$_SERVER['SCRIPT_NAME'].'?'.$_SERVER['QUERY_STRING']);,但每次尝试更改lang时都会出现重定向循环错误。

UPDATE

代码选择语言:在我session.php文件

<?php $actual= $_SERVER["PHP_SELF"]."?".$_SERVER["QUERY_STRING"];?> 

<div id="langContainer"> 
    <span><a <?php if ($_SESSION['idLang']=='en') {echo"class='active'";}?> href="<?php echo $actual ?>&lang=en">EN</a></span> 
    <span><a <?php if ($_SESSION['idLang']=='fr') {echo"class='active'";}?> href="<?php echo $actual ?>&lang=fr">FR</a> </span> 
    <span><a <?php if ($_SESSION['idLang']=='es') {echo"class='active'";}?> href="<?php echo $actual ?>&lang=es">ES</a></span> 
    <span><a <?php if ($_SESSION['idLang']=='de') {echo"class='active'";}?> href="<?php echo $actual ?>&lang=de">DE</a></span> 
</div> 

if (!isset($_SESSION["idLang"])) 
    $_SESSION["idLang"] = 'en'; 

if (@isset($_GET["lang"])){ 
    $_SESSION["idLang"] = $_GET['lang']; 

    //header("location: ".$_SERVER['SCRIPT_NAME'].'?'.$_SERVER['QUERY_STRING']); 

} 

所以我的问题是,如果有反正我能得到我的网址清洁,隐藏lang变量?

感谢

+0

如果你想要一个干净的网址,使用URL重写。然后你可以有这样的网址:'domain.com/en/file/1'。如果你想改变语言,你可以使用正则表达式来替换新的语言,同时保持路径的其余部分。 – 2013-04-30 15:08:48

+0

你是如何构建这些网址的?只需*在当时替换* lang参数,而不是附加另一个参数。 – deceze 2013-04-30 15:09:20

+0

@deceze我用附加代码更新了帖子。 – peterK 2013-04-30 15:23:09

回答

0

动态建立查询参数,在当前URL替换退出的:

<a href="...?<?php echo http_build_query(array('lang' => 'foo') + $_GET); ?>">