Yii和Mod Rewrite:重定向到用户语言翻译的url

时间:2012-02-29 14:27:01

标签: .htaccess yii multilingual

我正在使用Yii开发一个多语言Web应用程序。

我应用了更改来隐藏index.php,将urlFormat更改为路径并使用用户语言示例/it/index.php /en/index.php等添加到url路径slug ...

现在的问题是,一旦用户选择其他语言,我需要自动重定向到其他网址。例如:

http://localhost/~antonio/project/it/women 需要重定向到: http://localhost/~antonio/project/it/femme

我一直在玩htaccess而根本没有运气。这是实际的代码:

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
RewriteBase /~antonio/project/
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

#My重定向代码(除此之外还尝试了几个没用的东西)

RewriteRule ^it/women$ it/femme

我真的很感激这个问题的任何帮助,因为它让我发疯。

由于

编辑::

我用mod_rewrite投降了。我通过将此代码添加到/layout/main.php找到了另一种解决方案:

<?php 
$onurl = Yii::app()->getRequest()->requestUri;
if ($onurl == "/~antonio/project/it/women") {
    $this->redirect("/~antonio/project/it/femme");
} elseif ($onurl == "/~antonio/project/it/men") {
    $this->redirect("/~antonio/project/it/uomme");
} 

根据语言/单词的组合进行冲洗和重复

2 个答案:

答案 0 :(得分:0)

如果没有设置正确的虚拟主机,这可能无效(因此,您可以使用http://localhost/~antonio/project/it/women这样的网址,而不是像http://project1.dev那样的本地网址。但无论如何我会这样做,因为它会使您的开发环境变得更好! (Here's a place to start)。

无论如何,我会尝试这样做:只需保留.htaccess文件集like you normally would for "path" style urls,然后使用UrlManager解析$_GET['lang']参数?所以你在config.php中会有这样的urlManager设置:

'urlManager'=>array(
  'urlFormat'=>'path', // use path style parameters
  'showScriptName'=>false, // get rid of index.php
  'rules'=>array(
    // this parses out the first chunk of url into the "lang" GET parameter
    '<lang:[\w\-]+>/<controller:[\w\-]+>/<action:[\w\-]+>'=>'<controller>/<action>',
  )
)

这样,像http://project1.dev/it/controller/action这样的网址将重定向到您的控制器中的“操作”操作,就像正常(控制器/操作)一样,但在您的操作中,$_GET['lang']现在将具有“它”的值”

我希望有所帮助,这是一个黑暗中的镜头。我不确定你是如何实际触发不同语言的,所以$ _GET参数毕竟可能没什么用。

答案 1 :(得分:0)

在htaccess中找到了一种方法:

RewriteCond %{REQUEST_URI} ^/~antonio/project/it/donna/shoes/(.*)$
RewriteRule ^it/donna/shoes/(.*)$ /~antonio/project/it/donna/calzature/$1 [L,R]