Codeigniter i18n语言导致$ GET变量被删除

时间:2013-02-26 05:15:20

标签: codeigniter

当我使用javascript刷新到以下网址时,无法获取codeigniter i18n语言和$ GET网址

http://example.com/search?in=word&other=word2

它只是去 http://example.com/en/search和$ GET变量丢失

我的htaccess看起来像这样

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

什么是最优雅的解决方案

// config/routes.php的一部分

$route['^(en|fr)/(.+)$'] = "$2";
$route['^(en|fr)$'] = $route['default_controller'];

3 个答案:

答案 0 :(得分:0)

更改最后一行以包含查询字符串,因为重写规则删除了该字符串。请参阅apache docs

RewriteRule .* index.php/$0 [PT,L,QSA] 

答案 1 :(得分:0)

我发现的最佳方式是在javascript中执行此操作,只需在我的脚本中添加lang

<script>
var lang="<?php echo $this->lang->lang(); ?>";
</script>

答案 2 :(得分:0)

我找到了方法,我在switch_uri函数中添加了一些更改,所以现在我的函数看起来像这样:

function switch_uri($lang)
  {
    if ((!empty($this->uri)) && (array_key_exists($lang, $this->languages)))
    {

        if ($uri_segment = $this->get_uri_lang($this->uri))
        {
            $uri_segment['parts'][0] = $lang;
            $uri = implode('/',$uri_segment['parts']);
        }
        else
        {
            $uri = $lang.'/'.$this->uri;
        }

        // Add $_GET string
        if (count($_GET) > 0)
            $uri .= '?' . http_build_query($_GET, '', "&");
    }

    return $uri;
  }