2016-03-12 30 views
1

這裏exacly相同的路徑是什麼,我試圖做的:重定向到具有不同勢languge

任何網頁的客戶開放腳本將他重定向到他從$_SERVER["HTTP_ACCEPT_LANGUAGE"];

例如閱讀首選語言: 客戶瀏覽器以西班牙語設置。如果他打開網頁http://example.com/script-name.php?param1=aa&param2=bb

比腳本將他重定向到http://example.com/es/script-name.php?param1=aa&param2=bb

我有腳本,它提供給我指將其排序

比我腳本讀取地址

瀏覽器 $lang=substr(Get_Client_Prefered_Language(),0,2);的語言
$location = ''; 
parse_str(html_entity_decode($_SERVER['QUERY_STRING']),$query_string); 
if(isset($query_string['language'])) {$query_string['language'] = null;} 
$new_query_string = !empty($query_string) ? http_build_query($query_string) : ''; 
if($new_query_string != ''){$location .= '?'.$new_query_string;} 

並提供給我新的地址:

$location="https://macrohosting.co.uk/".$lang.$_SERVER["SCRIPT_NAME"].$location;

,比我可以使用header('location: '.$location);

所有工作得很好,但有些我已經URL rewrited頁面。

而且不知道如何調整上面的腳本,所以當客戶訪問http://example.com/page1.htm比將被重定向例如以http://example.com/es/page1.htm

如果沒有修改客戶被重新導向http://example.com/es/page_example.php?param=aa&param=bb

+0

您使用什麼webserver進行重寫? Apache還是Nginx? –

+0

我正在使用LiteSpeed – Solver

回答

0

沒有必要爲你重定向用戶爲每個請求。這是解決問題的有效方法。

您可以在前端控制器(例如index.php文件)中獲取用戶瀏覽器語言,然後相應地生成鏈接。

你試圖打你的web服務器2次爲每個請求?這不是一個選項。

如果您使用的是PHP框架,應該有更好的方法來處理這個問題。

<?php 
    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); 
    $link_to_about_us_page = "http:://domain.com/$lang/about"; 

,並記住,在每一個請求域後第一個參數是語言,並根據您要獲取從您的存儲和顯示數據內容的語言。(這部分應該由你的路由器來處理)

,如果沒有提供語言,則將用戶重定向到默認語言。 例如

http://domain.com/contact 

http://domain.com/en/contact 

這就是如何Drupal的手柄多種語言。有多種東西可以影響內容語言(用戶瀏覽器| url |用戶ip | ...)

您可以安排優先級。

+0

你是對的,我應該這樣做,只爲客戶的第一個客戶打開鏈接。可能在會話中存儲語言?該腳本在WHMCS中用作鉤子。我只需要先解決我的問題。 – Solver

+0

如果seo對您很重要,請閱讀 https://support.google.com/webmasters/answer/182192?hl=zh-CN 並在會話中存儲用戶語言並不是一個壞主意,但請確保您的網址不同每種語言。多數民衆贊成谷歌對SEO說。 例如 域名/ en/blabla 域名/ fr/bleble – mhndev

+0

感謝mhndev我已經在使用此頁面的所有建議。我的頁面已被重寫爲http://example.com/es/page.php我只是想解決重定向問題。 – Solver

相關問題