2013-04-30 162 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); ?>">