2016-09-08 108 views
1

我有一個這種結構的多語言網站http://www.url.com/en/,http://www.url.com/it/,http://www.url.com/pt/等 我現在的問題是,當你訪問鏈接url.com我會有3個重定向。重定向網站內部鏈接

  1. http://url.com
  2. http://www.url.com
  3. http://www.url.com/en/

我該怎麼做纔能有只有2個重定向?如果你訪問http://url.com重定向到http://www.url.com/en/ 在我的htaccess文件中我有這樣的路線。

RewriteCond %{HTTP_HOST} ^url.com [NC] 
RewriteRule ^(.*)$ http://www.url.com/$1 [L,R=301] 

這一個從url.com重定向到http://www.url.com。在此之後被重定向一個PHP腳本文件識別的域名並再次將其重定向到/ EN/

$url= strpos($_SERVER['REQUEST_URI'],"/".$lang."/"); 
if($url!==0){ Header("HTTP/1.1 301 Moved Permanently"); 
Header("Location: http://www.url.com/en/"); } 

之後,我有一些條件來檢查,如果你是在另一種語言。

if($lang == "pt"){$langcheck = "pt"} 

我的鏈接的創建是這樣的:

RewriteRule ^([_A-Za-z0-9-]+)\/$ index.php?page=index&lang=$1 [L] 

所以我應該在htaccess的寫來解決這個每種語言。因爲如果我將RewriteRule更改爲url.com/en/,則其他語言不再有效。

+0

我很抱歉,我不能,你如何讓語言得到它,你怎麼重定向。 –

+0

當您進入url.com時,如果URL與url.com/en/不同,我會檢查functions.php。如果不同,我將重定向到URL url.com/en/。只有在訪問鏈接url.com時纔會出現此情況,但如果您輸入url.com/it/,則會看到另一種語言。我的問題是當您訪問url.com時(我希望首次將其重定向到url.com/en/,而不是www.url.com,然後再轉到www.url.com/en/。 –

回答

0

如何做到這一點取決於你從哪裏得到語言字符串,你想支持多少種語言,以及這種交互應該是多麼複雜。

如果它只是幾種語言,並且您想使用瀏覽器設置進行此操作,則可以使用htaccess rewrites

但是,如果您不僅僅只有幾種語言,還希望讓用戶在網站本身中選擇自己的語言,或者比上述任何語言更復雜。那麼,你需要在PHP中做所有事情。
這意味着刪除缺少「www」域的htaccess重定向,然後在PHP代碼中檢查它。之前或之後,您檢查選擇的語言。在實際重定向之前,使用兩種檢查來確定重定向到的鏈接。

元例如:

// We want all users to use the domain with www. 
$redir = ''; 
if (substr ($url, 0, 3)) != 'www') { 
    $redir .= 'www.'; 
} 

// If user has selected a different language, we need to redirect for that too. 
if (!empty ($lang)) { 
    $redir .= "{$base_url}/{$lang}/"; 
} 

// If $redir isn't empty, redirect the user. 
// PS: Always remember to use `die()` after a `header()` redirect! 
+0

感謝你已經測試過了,我從htaccess中刪除了重定向,並且在第一個字節中工作完美,但是在我的內部鏈接不工作(正在與http://url.com/innerl和www.url.com/合作innerl)。我的網站對所有鏈接進行重定向的工作量很大,我試圖找到一種方法來使用htaccess。 –

+0

您無需爲使用PHP的所有鏈接重定向。你唯一需要做的就是和上面類似的東西,它測試了網站的所有請求。如果您有多個入口點,那麼您可以只使用上述代碼的功能,將其包含在每個頁面中並運行它。幹,畢竟。 – ChristianF

+0

謝謝!我會盡力! –